leetcode刷题记录 402.移掉k位数字
思路
//数学知识:123a456 和123b456 的大小取决于a和b的大小,也就是说两个数字在同位数的情况下的大小关系取决于第一个不相同的数
//数据结构:采用栈
//算法思路:将即将入栈的元素栈中的元素一一进行比较,找到元素该有的位置
代码
char * removeKdigits(char * num, int k){
int len = strlen(num), top = 0;
char* stk = malloc(sizeof(char) * (len + 1));
for (int i = 0; i < len; i++) {
while (top > 0 && stk[top] > num[i] && k) {
top--, k--;
}
stk[++top] = num[i];
}
top -= k;
char* ans = malloc(sizeof(char) * (len + 1));
int ansSize = 0;
bool isLeadingZero = true;
for (int i = 1; i <= top; i++) {
if (isLeadingZero && stk[i] == '0') {
continue;
}
isLeadingZero = false;
ans[ansSize++] = stk[i];
}
if (ansSize == 0) {
ans[0] = '0', ans[1] = 0;
} else {
ans[ansSize] = '\0';
}
return ans;
}