java中如何移掉K位数字

发布时间:2022-01-17 14:33:36 作者:清风
来源:亿速云 阅读:153

本文将为大家详细介绍“java中如何移掉K位数字”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“java中如何移掉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。

答案:

 1public String removeKdigits(String num, int k) {
2    if (num.length() <= k)
3        return "0";
4    int digits = num.length() - k;
5    char[] stk = new char[digits];
6    int top = 0;
7    for (int i = 0; i < num.length(); i++) {
8        char c = num.charAt(i);
9        while (top > 0 && stk[top - 1] > c && k > 0) {
10            k--;
11            top--;
12        }
13        if (top < digits) {
14            stk[top++] = c;
15        } else {
16            k--;
17        }
18    }
19    int idx = 0;
20    while (idx < digits && stk[idx] == '0')
21        idx++;
22    return idx == digits ? "0" : new String(stk, idx, digits - idx);
23}

解析:

我们可以先不用看上面的代码,等我们分析完之后再看,否则直接看容易懵。上面的题说的是从一个字符串num中移除k个数字,使剩下的数字最小。我们可以先从移除一个数字开始看

java中如何移掉K位数字

所以我们找出了一个规律就是,就是从左往右删除第一个降序开始的值。

比如第一个3156,31是降序,所以删除3;

比如第二个1563,63是降序,所以删除6;

比如第二个3756,75是降序,所以删除7。

如果没有降序的,比如1234,我们就删除最后一个,结果才能是最小。

我们再来举一个移除两个数字的例子

java中如何移掉K位数字

所以规律很容易发现了,就是从左往右删除开始降序的数字,直到删除k个为止。或者也可以这样理解,就是每遍历一个数字就要判断他前面有没有比他大的数字,如果有就删除,直到累计删除k个为止

1,那么这时候问题就来了,如果遍历完了删除的还不到k个怎么办呢,就像上面说的1234没有降序的这种,我们就删除最后的几个数字,凑够k个为止。

2,这个时候还会有一个问题,比如2014,如果我们删除一个数字让剩下的数字最小,我们删除的是2,那么结果就会变成014,所以我们还要把前导0去掉。

所以原理就这么简单。再来看上面的代码是不是如醍醐灌顶般豁然开朗。

而上面的代码稍微有点不同的是,他没有在原始字符串上操作,而是使用了一个临时数组stk,他会把原始字符串逐个放到stk数组中,放的时候如果发现前面有比他大的,就把前面比他大的移除掉,第13行有个判断,如果个数达到了那么当前值就不在添加了,在下一轮的for循环中还会进行判断,第20行通过循环去掉前导0。

Java的特点有哪些

Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

感谢您能读到这里,小编希望您对“java中如何移掉K位数字”这一关键问题有了从实践层面最深刻的体会,具体使用情况还需要大家自己动手实践使用过才能领会,如果想阅读更多相关内容的文章,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. 剑指offer:数字序列中某一位的数字
  2. java中如何判断数字是否为质数

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:java如何实现分隔链表

下一篇:vue如何用Echarts画柱状图

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》