保留最大整数.md

##首先我要说一下,这个题真的是我笔试的时候做出来了的。但是浏览器bug,关掉电脑,今天打开之后完美运行!很累,再见offer!

一楼爆照—>

输入分两行一行为n, 表示要删除的位数,一行为大整数。输出,大整数删除n位数字之后其他位置不变的情况下最大的数字。

样例输入

1
325

样例输出

35

解析:

哟今天下午什么都不想干,想起还有一个题没有做出来,嗯。灵感乍泄!
我们举个例子5 4 3 2 1 6 5 4。我们从左到右查看,5 4 3 2
1是降序前面肯定不能去掉。1<6,1去掉之后就可以将6提前一位。然后再从右开始
5 4 3 2 6 5 4中2<6去掉2。如果要去掉五个数字的话,去掉了4 3 2 1
之后,就剩下了5 6 5 4,再发现5 < 6,去掉5就好了。大概就是这样下面贴上源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 function ch(str, n){
var str = str;
var len = str.toString().length;
for(var i = len -1; i>=0; i--){
arr[i] = str%10;
str = (str - arr[i])/10; //一直到这里都是为了处理输入的整数为数组
}
var arr = str;
var len = str.length;
arr = den(arr,n); //这里才是正经的对数组删除相应的n位的数字
var S = arr.join("");
S = parseInt(S);
console.log(S);
return S;
}
1
2
3
4
5
6
7
8
function den(arr,n){   //每次从数组中删除一个数字得到当前最大数,并返回删除后的数组
var len = arr.length;
var n = n;
for(var i = 0; i < n; i++){
arr = de(arr);
}
return arr;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function de(arr){   //每次删除时的具体逻辑,使用了splice函数,真的是相当便利呢。请原谅我的怠惰
var len = arr.length;
for(var i = 0; i< len; i++){
if(arr[i] >= arr[i+1]){
continue;
}else if(arr[i] < arr[i+1]){
arr.splice(i, 1);
break;
}
if(i == len){
arr.splice(i-1, 1);
}
}
arr.length = len - 1;
return arr;
}

上面就是最近的那个算法,下面是另外安利一个我的一个做的动画的小demo。做完了之后全部推上去。

Mario