Delete Digits
Description:
Given string A representative a positive integer which has N digits, remove any k digits of the number, the remaining digits are arranged according to the original order to become a new positive integer.Find the smallest integer after remove k digits. N <= 240 and k <= N.
Example:
Given an integer A = “178542”, k = 4, return a string “12”
分析:
题目是要去除 k 个字符,我们可以逆向考虑,从A中选取 A.size() - k 个字符。由于选取的字符需要保留原来的位置,所以从左边最高位开始依次向右边低位选取。直觉上:如果我们每次都选去最小的字符,最终就可以得到最小的数字。事实上它也满足贪心的性质:
1. 最优子结构:局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。
2. 无后效性:某个状态以后的过程不会影响以前的状态,只与当前状态有关这种方法的时间复杂度是 O(n^2) 。
思路:
按照上面分析所说的方法进行选取,由于最后的数字的位数为 A.size() - k ,所以左边第一位必须从 A 的 0 ~ k 位(即 A[0] ~ A[k])选取,假设选取的为 i 位(即 A[i]),则接下来的左边第二位必须从 i+1 ~ k+1 位(即 A[i+1] ~ A[k+1] )选取,重复此步骤直到选取了A.size() - k 位,得到的结果就是最终的结果。
Code:
1 | class Solution { |