中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中如何移掉K位數字

發布時間:2022-01-17 14:33:36 來源:億速云 閱讀:156 作者:清風 欄目:大數據

本文將為大家詳細介紹“java中如何移掉K位數字”,內容步驟清晰詳細,細節處理妥當,而小編每天都會更新不同的知識點,希望這篇“java中如何移掉K位數字”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內容如下,一起去收獲新知識吧。

給定一個以字符串表示的非負整數 num,移除這個數中的 位數字,使得剩下的數字最小。

注意:

  • 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。

答案:

 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位數字”這一關鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領會,如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣威市| 东宁县| 静安区| 克山县| 五家渠市| 拉孜县| 南华县| 桦川县| 青冈县| 金门县| 昭觉县| 乐都县| 内丘县| 黄石市| 元阳县| 华池县| 介休市| 葫芦岛市| 西充县| 嘉义市| 昌黎县| 龙游县| 惠东县| 玉山县| 余干县| 双辽市| 三都| 兴宁市| 淳安县| 洛南县| 龙山县| 新河县| 肥城市| 曲阳县| 华安县| 新兴县| 台中县| 呼伦贝尔市| 延吉市| 葵青区| 长岭县|