每天 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...