C语言 | Leetcode C语言题解之第402题移掉K位数字

题目:

题解:

cpp 复制代码
char* removeKdigits(char* num, int k) {
    int n = strlen(num), top = 0;
    char* stk = malloc(sizeof(char) * (n + 1));
    for (int i = 0; i < n; i++) {
        while (top > 0 && stk[top] > num[i] && k) {
            top--, k--;
        }
        stk[++top] = num[i];
    }
    top -= k;

    char* ans = malloc(sizeof(char) * (n + 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;
}
相关推荐
小安同学iter11 小时前
SQL50+Hot100系列(11.9)
算法·leetcode·职场和发展
ShineWinsu14 小时前
对于数据结构:堆的超详细保姆级解析——下(堆排序以及TOP-K问题)
c语言·数据结构·c++·算法·面试·二叉树·
Nebula_g14 小时前
C语言应用实例:解方程(二分查找)
c语言·开发语言·学习·算法·二分查找·基础
散峰而望14 小时前
C语言刷题-编程(一)(基础)
c语言·开发语言·编辑器
异步的告白17 小时前
C语言-数据结构-1-动态数组
c语言·数据结构·c++
奔跑吧邓邓子18 小时前
【C语言实战(78)】C语言进阶:筑牢数据安全防线,密码学实战探秘
c语言·密码学·数据安全·开发实战
Herbert_hwt18 小时前
C语言循环结构完全指南:掌握for、while、do-while循环及实战应用
c语言
7澄118 小时前
深入解析 LeetCode 1:两数之和
算法·leetcode·职场和发展·arraylist
奔跑吧邓邓子18 小时前
【C语言实战(79)】深入C语言单元测试:基于CUnit框架的实战指南
c语言·单元测试·实战·cunit
Miraitowa_cheems19 小时前
LeetCode算法日记 - Day 98: 分割回文串 II
数据结构·算法·leetcode·深度优先·动态规划