5.20
最开始以为,只要将数字排序,依次删掉最大的数就可以。这在逻辑上完全错误的。
应该是从最高位开始判断,当它大于它的后一位的时候,就应该删除,这样删除K次即可。
如果还没有删除n次,数字变成严格递增的,这样只要删除最后(length - k)位就可以了
还需要处理“0000001”,这种类似的情况。
public class Solution {
/**
*@param A: A positive integer which has N digits, A is a string.
*@param k: Remove k digits.
*@return: A string
*/
// 最初以为,把 最大的数删掉就可以了
public String DeleteDigits(String A, int k) {
// write your code here
int length = A.length();
if(length <= k){
return "";
}
for(int i = 0;i < k; i++){
for(int j = 0; j < A.length()-1;j++){
if(A.charAt(j) > A.charAt(j+1)){
A = A.replaceFirst(Character.toString(A.charAt(j)),"");
j --;
break;
}
}
}
if(A.length() != (length - k)){
A = A.substring(0,length - k);
}
while(A.length() > 1 && A.charAt(0) == '0'){
A = A.substring(1,A.length());
}
return A;
}
/*
public String DeleteDigits(String A, int k) {
// write your code here
int length = A.length();
if(length <= k){
return "";
}
int[] arr = new int[length];
for(int i = 0; i < length; i++){
arr[i] = A.charAt(i) - '0';
}
Arrays.sort(arr);
int flag = length -1;
for(int i = 0; i < k;i++){
A = A.replaceFirst(Integer.toString(arr[flag]), "");
flag --;
}
while(A.length() > 1 && A.charAt(0) == '0'){
A = A.substring(1,A.length());
}
return A;
}
*/
}