每日一道 LeetCode 11 外觀數列

2022-03-17 18:26:30 字數 2066 閱讀 2068

每天 3 分鐘,走上演算法的逆襲之路。

每日一道 leetcode 前文合集

github:

gitee:

給定乙個正整數 n(1 ≤ n ≤ 30),輸出外觀數列的第 n 項。

注意:整數序列中的每一項將表示為乙個字串。

「外觀數列」是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下:

1.     1

2. 11

3. 21

4. 1211

5. 111221

第一項是數字 1

描述前一項,這個數是 1 即 「乙個 1 」,記作11

描述前一項,這個數是 11 即 「兩個 1 」 ,記作21

描述前一項,這個數是 21 即 「乙個 2 乙個 1 」 ,記作1211

描述前一項,這個數是 1211 即 「乙個 1 乙個 2 兩個 1 」 ,記作111221

示例 1:

輸入: 1

輸出: "1"

解釋:這是乙個基本樣例。

示例 2:

輸入: 4

輸出: "1211"

解釋:當 n = 3 時,序列是 "21",其中我們有 "2" 和 "1" 兩組,"2" 可以讀作 "12",也就是出現頻次 = 1 而 值 = 2;類似 "1" 可以讀作 "11"。所以答案是 "12" 和 "11" 組合在一起,也就是 "1211"。

今天下班回來太晚了,我就簡單寫寫,有不理解的再私信問我吧。

首先幫忙理解下這道題,這道題的意思實際上就是按照一種規律來進行描述數字。

按照正常人的思路,這個演算法首先需要乙個大迴圈,直接迴圈到 n ,然後在每一次迴圈中得到上一次結果的新的描述。

最開始第一次是 1 , 這個是規定。

第二次迴圈是描述上乙個數字,結果是 11 ,意思是上乙個數字是 1 個 1 。

第三次迴圈上描述上一次的 11 ,結果是 21 ,含義是 2 個 1 。

第四次迴圈還是描述上一次的 21 ,結果是 1211 ,含義是 1 個 2 , 1 個 1 。

......

後面的我就不寫了,這道題就先拆解到這裡,確實蠻難理解的,說實話,我看題是沒看懂的,直到我看到了答案分析了**後才看懂題。

我這是真的菜的一批。

首先宣告,這道題我沒有想出來任何解法,所有解法均來自於 leetcode 的網友。

第乙個我一定要介紹這個解法,因為這個題給出的數字是有限的,所以有乙個非常皮的網友直接給了這麼一串**,看的我是目瞪口呆:

public string countandsay(int n) 

}

這位同學抓住了這道題的輸入是有限制的,直接把所有的結果窮舉出來,然後用了一波switch,我是真的服。

果然刷 leetcode 題的人的腦迴路和正常人完全不同。

對於題還沒理解清楚的同學可以多 debug 幾次下面這段**,這種方案是乙個人的常規正向的思維過程。

public static string countandsay(int n) 

}s_n_1 = sb.tostring();

}return s_n_1;

}

遞迴講道理我還是不大會寫,硬著頭皮先抄一遍**吧。

public string countandsay_1(int n)  else if (str.charat(i) != str.charat(a) ) 

}return res.tostring();

}

先這樣,今天晚上時間比較緊,寫的內容不多,還望各位看到這篇文章的同學海涵,明天我一定找補回來。

Leetcode 每日一道

如果不出意外每天會寫一道演算法題的部落格。如果題目簡單,就一天發布一道。如果題目比較難。我會2 3天發一道演算法的題目。今天寫的這道題目比較簡單。題目如下 解法我是用c 寫的。我的解法的大致想法是 先把需要轉換的矩陣直接轉換成一維的陣列,然後再根據要求把一維中的元素全部截為以c個元素為一組的vect...

每日一道leetcode 最大括號深度

有效括號字串 定義 對於每個左括號,都能找到與之對應的右括號,反之亦然。詳情參見題末 有效括號字串 部分。巢狀深度 depth 定義 即有效括號字串巢狀的層數,depth a 表示有效括號字串 a 的巢狀深度。詳情參見題末 巢狀深度 部分。有效括號字串型別與對應的巢狀深度計算方法如下圖所示 給你乙個...

每日一道演算法題

no.1 設指標變數fron t表示鏈式佇列的隊頭指標,指標變數rear表示鏈式佇列的隊尾指標,指標變數s指向將要入佇列的結點x,則入佇列的操作序列為 a.front next s front s b.s next rear rear s crear next s rear s d.s next f...