給定乙個正整數 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層報第n-1層的情況,題目解釋,count計數,value為數值
1. 1
2. 11 --前一層有count = 1個value = 1
3. 21 --前一層有count = 2個value = 1
4. 1211 --前一層有count = 1個value = 2,count = 1個value = 1
5. 111221 --前一層有count = 1個value = 1,count = 1個value = 2,,count = 2個value = 1
...這樣排列,簡單想:前面n1個1,n2個2,n3個3 --->那麼表示為 n11n22n33
理解了題目的意思就好辦了。
這裡主要拍自己兩下,經常犯的錯誤就是把 判斷的 == 寫成 = ,恨啊!
class solution {
public:
string countandsay(int n) {
if(n == 1) return "1";
string previous = countandsay(n-1), res = "";
int count = 1;
for(int i = 0; i「12」->「21」 ,最終輸出「11221」
(LeetCode 字串 難度簡單 1108題
給你乙個有效的 ipv4 位址 address,返回這個 ip 位址的無效化版本。所謂無效化 ip 位址,其實就是用 代替了每個 示例 1 輸入 address 1.1.1.1 輸出 1 1 1 1 示例 2 輸入 address 255.100.50.0 輸出 255 100 50 0 解題思路 ...
(LeetCode 字串 難度簡單 1332題
給你乙個字串 s,它僅由字母 a 和 b 組成。每一次刪除操作都可以從 s 中刪除乙個回文子串行。返回刪除給定字串中所有字元 字串為空 的最小刪除次數。子串行 定義 如果乙個字串可以通過刪除原字串某些字元而不改變原字元順序得到,那麼這個字串就是原字串的乙個子串行。回文 定義 如果乙個字串向後和向前讀...
(LeetCode 字串 難度簡單 1455題
給你乙個字串 sentence 作為句子並指定檢索詞為 searchword 其中句子由若干用 單個空格 分隔的單詞組成。請你檢查檢索詞 searchword 是否為句子 sentence 中任意單詞的字首。如果 searchword 是某乙個單詞的字首,則返回句子 sentence 中該單詞所對應...