免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

java如何實現字典序排數

這篇文章主要為大家展示了java如何實現字典序排數,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶大家一起來研究并學習一下“java如何實現字典序排數”這篇文章吧。

創新互聯主要從事做網站、網站設計、網頁設計、企業做網站、公司建網站等業務。立足成都服務包河,十多年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:028-86922220

給定一個整數 n, 返回從 1 到 n 的字典順序。

例如,

給定 n =13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。

請盡可能的優化算法的時間復雜度和空間復雜度。輸入的數據 n 小于等于 5,000,000。

答案:

 1public List<Integer> lexicalOrder(int n) {
2    List<Integer> res = new ArrayList<>();
3    for (int i = 1; i < 10; ++i) {
4        dfs(i, n, res);
5    }
6    return res;
7}
8
9public void dfs(int cur, int n, List<Integer> res) {
10    if (cur > n)
11        return;
12    res.add(cur);
13    for (int i = 0; i < 10; ++i) {
14        dfs(10 * cur + i, n, res);
15    }
16}

解析:

解這題之前實現要明白什么是字典序,其實就是類似于字典一樣,根據字母的順序進行排列,我們先來看下面的圖

java如何實現字典序排數

我們可以把它看成有9棵樹,每棵樹的根節點的值分別是從1到9,并且每棵樹都有10個子節點,并且每個子節點又會有10個子節點……

1,代碼3到5行分別遍歷這9棵樹。

2,方法dfs對每棵樹執行dfs(深度優先搜索),關于樹的深度優先搜索可以參考前面介紹過的304,完全二叉樹的節點個數這道題第二種解法使用的就是深度優先搜索(dfs)

我們仔細觀察上面的圖,字典序排數有一個規律,比如當n等于300的時候,結果是下面這樣的

java如何實現字典序排數

我們可以觀察上面的數字,也可以查看最上面的圖,就會發現這樣一個規律。當數字curr小于n的時候,只要curr的個位數是9,那么他的下一個數就是(curr/10)+1(但要保證curr/10的個位數不能是9,如果是9就繼續執行curr/10,直到curr/10的個位數不是9為止,比如199的下一個數是2),比如109的下一個是11,129的下一個是13一樣。如果curr等于n,那么他的下一個數也是和上面同樣的操作。理解了這點,代碼就很容易寫出來了

 1public List<Integer> lexicalOrder(int n) {
2    List<Integer> ans = new ArrayList<>(n);
3    int curr = 1;
4    for (int i = 1; i <= n; ++i) {
5        ans.add(curr);
6        if (curr * 10 <= n) {
7            curr *= 10;
8        } else {
9            while (curr % 10 == 9 || curr == n)
10                curr /= 10;
11            curr++;
12        }
13    }
14    return ans;
15}

重點是在第9到10行,如果curr的個位數是9或者curr等于n就要執行curr/10這步操作,直到curr的個位數不是9為止。

Java的優點是什么

1. 簡單,只需理解基本的概念,就可以編寫適合于各種情況的應用程序;2. 面向對象;3. 分布性,Java是面向網絡的語言;4. 魯棒性,java提供自動垃圾收集來進行內存管理,防止程序員在管理內存時容易產生的錯誤。;5. 安全性,用于網絡、分布環境下的Java必須防止病毒的入侵。6. 體系結構中立,只要安裝了Java運行時系統,就可在任意處理器上運行。7. 可移植性,Java可以方便地移植到網絡上的不同機器。8.解釋執行,Java解釋器直接對Java字節碼進行解釋執行。

以上就是關于“java如何實現字典序排數”的內容,如果該文章對您有所幫助并覺得寫得不錯,勞請分享給您的好友一起學習新知識,若想了解更多相關知識內容,請多多關注創新互聯行業資訊頻道。

分享標題:java如何實現字典序排數
鏈接分享:http://m.newbst.com/article40/gpjeho.html

成都網站建設公司_創新互聯,為您提供軟件開發網站導航網站設計公司品牌網站設計靜態網站建站公司

廣告

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

外貿網站建設