leetcode402. 移掉K位数字

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

注意:

num 的长度小于 10002 且 ≥ k。
num 不会包含任何前导零。
示例 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。

思路:遇到右边相邻数字比本身小,就删除。比如13531,删5是最佳选择。如果不删,接下来的数字不论怎么操作,都会是135****,都会大于133****。

如果遇到右边相邻比本身大不该删除,因为会使数字更大。

对操作一次的新答案重复以上过程即可。

注意:可能到最后都没有删掉k个数,这时序列已经是一个非递减序列,应该删除后面对应个数的数字。

class Solution {public String removeKdigits(String num, int k) {LinkedList<Character> stack = new LinkedList<Character>();for(char digit : num.toCharArray()) {while(stack.size() > 0 && k > 0 && stack.peekLast() > digit) {stack.removeLast();k -= 1;}stack.addLast(digit);}for(int i=0; i<k; ++i) {stack.removeLast();}StringBuilder ret = new StringBuilder();boolean leadingZero = true;for(char digit: stack) {if(leadingZero && digit == '0') continue;leadingZero = false;ret.append(digit);}if (ret.length() == 0) return "0";return ret.toString();}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:43---派生类向基类转换、静态/动态的类变量

一、继承中类的类型转换规则 我们普通的编程规则规定,如果我们想把引用或指针绑定到一个对象上,则引用或指针的类型必须与所绑定的对象的类型一致或者对象的类型含有一种可接受的const类型转换规则。但是继承关系中的类比较例外,其规则如下:①我们可以将基类的指针或引用绑…

C++:42---类的内存大小

一、类内存的特点 类内无任何成员变量时,默认为1字节类内成员遵循内存的对齐补齐规则(与结构体的对齐补齐一样)函数不占内存(存在代码段)有继承关系时,父类的成员变量也属于类内寸的一部分,但是C++标准并没有明确规定派生类的对象在内存中如何分布(也就是说基类部分和派…

C++:40---继承中类成员的变化关系

一、派生类继承基类成员的规则 ①派生类继承了基类的所有数据成员与函数(不论公有成员、保护成员、私有成员)②派生类虽然继承了基类的所有成员,但是能不能访问基类的成员还与父类成员的属性(public、protected、private)以及继承方式有关③类静态成员:如果基类定义了一个静…

C++:37---继承概念、继承种类

这篇文章不详细分析继承和不同继承关系下的特点。 我将在后边几篇文章里专门针对继承关系来做分析。 一、基类与派生类的概念 基类(父类):在继承关系中处于上层的类派生类(子类):在继承关系中处于下层的类class A;class B;class C:public A //C为A的子类,A为C的父类{};…

C++:41---覆盖和隐藏

覆盖(重写) 概念: 基类的虚函数,如果派生类有相同的函数,则子类的方法覆盖了父类的方法 隐藏 概念: 当子类定义出的“成员变量、方法”与父类的重名时,父类的会被隐藏重点:对于函数,基类定义了一些列的重载函数,在派生类中只要有一个同名的函数(即使参数列表不…

leetcode179. 最大数

给定一组非负整数&#xff0c;重新排列它们的顺序使之组成一个最大的整数。 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整数。 思路&#xff1a;贪心&#xff0c;对于…

C++:39---继承中构造函数、析构函数的关系

一、继承中构造函数的关系 如果父类没有构造函数,则子类初始化时不需要构造父类如果父类有构造函数,则子类初始化自己的构造函数时,要先初始化父类的构造函数基类的构造函数必须在派生类的构造函数初始化列表来进行初始化总结:在构造自己(子类)之前,需要先构造父类演示案…

Java应用服务器Tomcat

Tomcat 是一个小型的轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c;当在一台机器上配置好Apache 服务器&#xff0c;可利用它响应对HTML…

C++:38---final关键字和禁止类继承

一、final关键字 C++新标准规定:如果我们定义的类不希望被其他类继承,那么可以在类名后加一个final关键字但是final类仍然可以继承其他类。实际上C++11的关键字final有两个用途。第一,它阻止了从类继承;第二,阻止一个虚函数的重载。二、演示案例 class A final{}; class B…

C++:48---纯虚函数

一、纯虚函数 纯虚函数一种特殊的虚函数,在许多情况下在基类中不对虚函数做出有意义的实现,而是把它定义为纯虚函数,它的实现由派生类实现格式:virtual 返回类型 函数名(参数列表)=0;注意事项 纯虚函数不能实现,没有函数体,其实现由子类去实现各自的功能版本纯虚函数可以…

leetcode389. 找不同

给定两个字符串 s 和 t&#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例: 输入&#xff1a; s "abcd" t "abcde" 输出&#xff1a; e 解释&#xff1a; …

C++:47---绝不重新定义继承而来的缺省参数值

一、静态类型、动态类型 静态类型:在被声明时所采用的的类型动态类型:目前所知对象的类型演示案例 下面是一个继承体系class Shape {public:enum ShapeColor { Red, Green, Blue };virtual void draw(ShapeColor color = Red)const = 0;};class Rectangle :public Shape {pub…

C++:44---关键字virtual、override、final

一、虚函数 概念:在函数前面加virtual,就是虚函数虚函数的一些概念: 只有成员函数才可定义为虚函数,友元/全局/static/构造函数都不可以虚函数需要在函数名前加上关键字virtual成员函数如果不是虚函数,其解析过程发生在编译时而非运行时派生类可以不覆盖(重写)它继承的虚…

leetcode409. 最长回文串

给定一个包含大写字母和小写字母的字符串&#xff0c;找到通过这些字母构造成的最长的回文串。 在构造过程中&#xff0c;请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: "abccccdd" 输…

C++:46---绝不重新定义继承而来的non-virtual函数

一、看一个隐藏non-virtual函数的例子 假设class D以public的方式继承于class B,代码如下:class B {public:void mf();};class D :public B {};int main(){D x;B *pB = &x;pB->mf(); //调用B::mf()D *pD = &x;pD->mf(); //调用D::mf()return 0;}二、静态绑…

C++:45---多态

一、多态介绍 面向对象的核心思想是多态性,其含义是“多种形式”概念:在子类覆盖了父类函数的情况下,用父类的指针(或引用)调用子类对象,或者通过父类指针调用覆盖函数的时候(动态绑定),实际上调用的是子类的覆盖版本,这种现象叫做多态注意事项:只有用父类的指针(或引用…

leetcode415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和。 注意&#xff1a; num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库&#xff0c; 也不能直接将输入的字符串转换为…

C++:53---菱形继承、虚继承

一、菱形继承 在介绍虚继承之前介绍一下菱形继承概念:A作为基类,B和C都继承与A。最后一个类D又继承于B和C,这样形式的继承称为菱形继承菱形继承的缺点:数据冗余:在D中会保存两份A的内容访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访…

C++:49---继承中的友元

一、友元在继承中的关系我们在友元的文章中介绍过&#xff0c;友元关系不能继承。&#xff08;1&#xff09;友元关系不存在传递性&#xff0c;即每个类负责控制自己的友元类或者友元函数&#xff1b;&#xff08;2&#xff09;友元关系是单向的&#xff0c;不具有交换性。若类…

leetcode383. 赎金信

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串&#xff0c;判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成&#xff0c;返回 true &#xff1b;否则返回 false。 (题目说明&#xff1a;为了不暴露赎金信字迹&#xff0c;要从…