java中如何移掉K位數(shù)字

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

十年的共和網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整共和建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“共和網(wǎng)站設(shè)計”,“共和網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。

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

注意:

  • num 的長度小于 10002 且 ≥ k。

  • num 不會包含任何前導(dǎo)零。

示例 1 :

輸入: num = "1432219", k = 3
輸出: "1219"
解釋: 移除掉三個數(shù)字 4, 3, 和 2 形成一個新的最小的數(shù)字 1219。

示例 2 :

輸入: num = "10200", k = 1
輸出: "200"
解釋: 移掉首位的 1 剩下的數(shù)字為 200. 注意輸出不能有任何前導(dǎo)零。

示例 3 :

輸入: num = "10", k = 2
輸出: "0"
解釋: 從原數(shù)字移除所有的數(shù)字,剩余為空就是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個數(shù)字,使剩下的數(shù)字最小。我們可以先從移除一個數(shù)字開始看

java中如何移掉K位數(shù)字

所以我們找出了一個規(guī)律就是,就是從左往右刪除第一個降序開始的值。

比如第一個3156,31是降序,所以刪除3;

比如第二個1563,63是降序,所以刪除6;

比如第二個3756,75是降序,所以刪除7。

如果沒有降序的,比如1234,我們就刪除最后一個,結(jié)果才能是最小。

我們再來舉一個移除兩個數(shù)字的例子

java中如何移掉K位數(shù)字

所以規(guī)律很容易發(fā)現(xiàn)了,就是從左往右刪除開始降序的數(shù)字,直到刪除k個為止?;蛘咭部梢赃@樣理解,就是每遍歷一個數(shù)字就要判斷他前面有沒有比他大的數(shù)字,如果有就刪除,直到累計刪除k個為止。

1,那么這時候問題就來了,如果遍歷完了刪除的還不到k個怎么辦呢,就像上面說的1234沒有降序的這種,我們就刪除最后的幾個數(shù)字,湊夠k個為止。

2,這個時候還會有一個問題,比如2014,如果我們刪除一個數(shù)字讓剩下的數(shù)字最小,我們刪除的是2,那么結(jié)果就會變成014,所以我們還要把前導(dǎo)0去掉。

所以原理就這么簡單。再來看上面的代碼是不是如醍醐灌頂般豁然開朗。

而上面的代碼稍微有點不同的是,他沒有在原始字符串上操作,而是使用了一個臨時數(shù)組stk,他會把原始字符串逐個放到stk數(shù)組中,放的時候如果發(fā)現(xiàn)前面有比他大的,就把前面比他大的移除掉,第13行有個判斷,如果個數(shù)達到了那么當(dāng)前值就不在添加了,在下一輪的for循環(huán)中還會進行判斷,第20行通過循環(huán)去掉前導(dǎo)0。

Java的特點有哪些

Java的特點有哪些 1.Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,實現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進行復(fù)雜的編程。 2.Java具有簡單性、面向?qū)ο蟆⒎植际?、安全性、平臺獨立與可移植性、動態(tài)性等特點。 3.使用Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。

感謝您能讀到這里,小編希望您對“java中如何移掉K位數(shù)字”這一關(guān)鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領(lǐng)會,如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站標(biāo)題:java中如何移掉K位數(shù)字
網(wǎng)頁路徑:http://bm7419.com/article26/gigjcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣定制開發(fā)、網(wǎng)站導(dǎo)航網(wǎng)站設(shè)計公司、網(wǎng)站制作、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營