木又連續日更第14天(14/100)html
木又的第66篇leetcode解題報告
python
字符串
類型第9篇解題報告c++
leetcode第38題:報數web
微信
【題目】app
報數序列是一個整數序列,按照其中的整數的順序進行報數,獲得下一個數。其前五項以下:ui
1. 1
2. 11
3. 21
4. 1211
5. 111221
1
被讀做 "one 1"
("一個一"
) , 即 11
。11
被讀做 "two 1s"
("兩個一"
), 即 21
。21
被讀做 "one 2"
, "one 1"
("一個二"
, "一個一"
) , 即 1211
。spa
給定一個正整數 n(1 ≤ n ≤ 30),輸出報數序列的第 n 項。.net
注意:整數順序將表示爲一個字符串。3d
示例 1:
輸入: 1
輸出: "1"
示例 2:
輸入: 4
輸出: "1211"
【思路】
這道題題意可能不太好理解,下一個值是上一個值的報數:第一個值是‘1’,第二個值是第一個值的報數'11'(1個1),第三個值是第二個值的報數'21'(2個1),第四個值是第三個值的報數'1211'(1個2,1個1),以此類推。
所以,本題實現起來不難,注意考慮邊界問題。
【代碼】
python版本
class Solution(object):
def countAndSay(self, n):
"""
:type n: int
:rtype: str
"""
res = '1'
if n == 1:
return '1'
for i in range(1, n):
count = 1
tmp = ''
# 統計連續相同字符的個數,加入tmp中
for i in range(1, len(res)):
if res[i] == res[i-1]:
count += 1
else:
tmp += str(count) + res[i-1]
count = 1
tmp += str(count) + res[-1]
res = tmp
return res
C++版本
class Solution {
public:
string countAndSay(int n) {
string res="1";
int count=0;
string tmp;
for(int i=1; i<n; i++){
tmp = "";
count = 1;
// 統計連續相同字符的個數,加入tmp中
for(int j=1; j<res.size(); j++){
if(res[j] == res[j-1])
count++;
else{
tmp += to_string(count) + res[j-1];
count = 1;
}
}
tmp += to_string(count) + res[res.size()-1];
res = tmp;
}
return res;
}
};
前一篇文章:T65-括號生成
給我好看
本文分享自微信公衆號 - 木又AI幫(gh_eaa31cab4b91)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。