首页 > 其他分享 >js.移掉 K 位数字

js.移掉 K 位数字

时间:2024-10-10 18:22:12浏览次数:8  
标签:arr 数字 元素 js length num 移除 移掉

 链接:402. 移掉 K 位数字 - 力扣(LeetCode)

题目:

给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。

 

示例 1 :

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

示例 2 :

输入:num = "10200", k = 1
输出:"200"
解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。

示例 3 :

输入:num = "10", k = 2
输出:"0"
解释:从原数字移除所有的数字,剩余为空就是 0 。

提示:

  • 1 <= k <= num.length <= 105
  • num 仅由若干位数字(0 - 9)组成
  • 除了 0 本身之外,num 不含任何前导零

方法:

首先思考每次移除哪个元素。当是升序时,移除的是最后一个元素。是降序时,移除的是最前的元素。

我的思路是:

让arr栈第一个元素为num[0],arr[s]为栈顶元素,在arr[s]<=num[i],元素进栈。

在arr[s]>num[i],说明栈顶元素大于所遍历到的元素,出栈,并且i--,让下一个栈顶元素继续比较。

有思路后,就需要考虑边界问题和特殊情况。

我的代码还是比较啰嗦的,还可以优化。仅供参考。

代码:

/**

 * @param {string} num

 * @param {number} k

 * @return {string}

 */

var removeKdigits = function(num, k) {

    if(num.length == k) return '0'

    let arr = [num[0]],s = 0

    let i

//遍历num

    for(i = 1;i < num.length ; i++){

        if(k==0) {

            if(!(arr.length==0&&num[i]==0))

            arr.push(num[i]);

            continue;

        }

        // console.log(arr,arr[s],num[i])

        if(s==-1&&num[i]!=0){

            arr.push(num[i]);

            s++; continue;}

        if(arr.length==0&&num[i]==0){

            continue

        }

        if(arr[s]>num[i]){

            arr.pop()

            s--

            i--

            k--

        }else{

        arr.push(num[i])

        s++

        }

    }

    if(i==num.length){

        arr.splice(s-k+1,k)

    }

    // console.log(arr,k)

    return arr.join('')==''?'0':arr.join('')

};

 

标签:arr,数字,元素,js,length,num,移除,移掉
From: https://blog.csdn.net/qq_62541773/article/details/142822538

相关文章

  • js.生命游戏
    链接:289.生命游戏-力扣(LeetCode)题目:根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。给定一个包含 m×n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或......
  • js-存在重复元素
    219.存在重复元素II给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i]==nums[j] 且 abs(i-j)<=k 。如果存在,返回 true ;否则,返回 false 。代码:第一次尝试:/** *@param{number[]}nums *@param......
  • 【玩转 JS 函数式编程_010】3.2 JS 函数式编程筑基之:以函数式编程的方式活用函数(上)
    写在前面按照惯例,过长的篇幅分开介绍,本篇为JavaScript函数式编程核心基础的第二部分——以函数式编程的方式活用函数的上篇,分别介绍了JS函数在排序、回调、Promise期约、以及连续传递等应用场景下的用法演示。和之前章节相比难度又有一定的提升。准备好了吗?3.2.以......
  • 基于nodejs+vue疫情防控管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景近年来,全球范围内频繁爆发的疫情给社会带来了前所未有的挑战,特别是在校园这一人员密集且流动性大的环境中,疫情防控工作显得尤为重要。随着信息技术的飞速发......
  • 基于nodejs+vue疫情防控管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在新冠疫情全球蔓延的背景下,校园作为人员密集、流动性大的特殊场所,疫情防控工作显得尤为重要。随着疫情形势的不断变化,传统的人工管理模式已难以满足高效、......
  • 基于nodejs+vue疫情防控管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景近年来,全球范围内频繁爆发的疫情给社会生活和经济发展带来了巨大挑战。特别是在校园环境中,人员密集、流动性大,疫情防控难度尤为突出。为了确保师生的健康安......
  • IEEE全球极限编程大赛10.0题目题解:给出数字N,A,B,求出A,B之间与N互质的数的和(数据范围大)
    题目题目来源第10届IEEE极限编程大赛https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/inti-setsInordertomotivatehisPeruvianstudents,ateacherincludeswordsintheQuechualanguageinhismathclass.Today,hedefinedacurious......
  • Nuxt.js 应用中的 page:transition:finish 钩子详解
    title:Nuxt.js应用中的page:transition:finish钩子详解date:2024/10/10updated:2024/10/10author:cmdragonexcerpt:page:transition:finish是Nuxt.js中的一个事件钩子,专门用于处理页面过渡效果结束后的逻辑。这一钩子在页面过渡的onAfterLeave事件之后被调用,允......
  • 基于Node.js+vue高校宿舍分配管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高校招生规模的不断扩大,学生宿舍的管理变得日益复杂。传统的人工分配和管理方式不仅效率低下,而且容易出错,无法满足现代高校宿舍管理的需求。为了提升宿......
  • 基于Node.js+vue防疫物资管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景近年来,全球范围内疫情的频繁爆发对公共卫生体系构成了严峻挑战。防疫物资作为抗击疫情的重要基础,其高效管理和合理分配直接关系到疫情防控的成效。然而,传统......