问题描述:
比如给一个数字:857352749,与一个K:2
从 857352749 中删除2个数字使删除后的数字结果最大
解决方式:
1、每次从数字左边到右边找,如果发现左边的数比右边的少,那就把左边的数字删掉
2、如果遍历到最后一个数字都没有发现,那就把最后一个数字删掉
下面是java代码:
private static int getamax(int[] num, int k) {
int len = num.length;
int[] temp = Arrays.copyOf(num, len);
if(len < k)
return 0;
while(k > 0){
for(int i=1;i<=len;i++){
//如果遍历到最后一个数的位置,仍然比左边数小,那就把最后位置的数删掉,只需将len--
if(i == len){
len--;
break;
}
//发小左边数比右边数小,那就把左边数删掉
if(temp[i-1] < temp[i]){
int index = i;
while(index < len)
temp[index-1] = temp[index++];
len--;
break;
}
}
k--;
}
int res = 0;
//把删除的数字还原
for(int i=0;i<len;i++)
res = 10*res + temp[i];
return res;
}
//测试
public static void main(String[] args) {
int[] num = {9,8,7,6,5,4,3,2,1};
System.out.println("原数字: " + 987654321);
for(int k = 1;k < 9;k++)
System.out.println("当K为:" + k + " 时"+ "最大的数为: " + getamax(num,k));
}
}