我是靠谱客的博主 沉静身影,最近开发中收集的这篇文章主要介绍LeetCode 302 移掉K位数字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

输入: num = “1432219”, k = 3
输出: “1219”
解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。

理解:
首先从前往后判断,如果当前这个数大于后一位的数,那么这个位置就该删除
比如196 1和9比,让第一位留1肯定比9小,9和6比,把9删除肯定比6划算。
所以依次遍历即可,
但是会有些特殊情况 需要特殊处理
1.可能会有 100056 这种情况,删除掉1之后,0就不用再删除他了,继续从5,6开始
2.数列本来就递增,比如1 2 3 4 5 删除两位,那直接删除末尾
3.可能k很大,其实因为有2中地情况,k在之前没有删除数字,那么最后k剩下多少,就删除多少

用一个数组来模拟栈,如果之前的数大于当前的数,那么之前的数就要删除,也就是移除栈
否则的话判断是否栈为空
为空的话那么0就不要加入了 0作为头部没有意义 其他情况入栈

char * removeKdigits(char * num, int k){
int len=strlen(num),top=-1;
char *stack=(char *)malloc(sizeof(char)*(len+1));
for(int i=0;i<len;i++){
while(top!=-1 && k>0 && stack[top]>num[i]){top--,k--;}
if(num[i]!='0' || top!=-1)
stack[++top]=num[i];
}
if(k>0)top-=k;
if(top<0){top=0,stack[top]='0';};
stack[++top]='';
return stack;
}

如果不理解的话,Debug一下流程就通了

最后

以上就是沉静身影为你收集整理的LeetCode 302 移掉K位数字的全部内容,希望文章能够帮你解决LeetCode 302 移掉K位数字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(140)

评论列表共有 0 条评论

立即
投稿
返回
顶部