题目描述:https://zhuanlan.zhihu.com/p/533405389
https://leetcode.cn/problems/remove-k-digits/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int k;
void dfs(char *s, int len, int num)
{
int flag = 0;
if (num >= k || len <= 0) {
return;
}
if (len == 1) {
strcpy(s, "0");
return;
}
for (int i = 0; i < len - 1; i++) {
if (s[i] > s[i + 1]) { //关键点
flag = 1;
for (; i < len; i++) {
s[i] = s[i + 1];
}
}
}
if (flag == 0) {
s[len - 1] = 0;
}
dfs(s, len - 1, ++num);
}
int main(void)
{
char str[100000] = {0};
int res_len = 0;
char res[100000] = {0};
scanf("%s", str);
scanf("%d", &k);
dfs(str, strlen(str), 0);
int flag = 0;
for (int i = 0; i < strlen(str); i++) {
if (str[i] == '0' && flag == 0) {
continue;
}
flag = 1;
res[res_len++] = str[i];
}
if (res_len == 0) {
printf("0\n");
} else {
printf("%s\n", res);
}
return 0;
}