【leetcode刷題】T66-報數

木又連續日更第14天(14/100)html



木又的第66篇leetcode解題報告
python

字符串類型第9篇解題報告c++

leetcode第38題:報數web

https://leetcode-cn.com/problems/count-and-say/微信



【題目】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""一個二" ,  "一個一") , 即 1211spa

給定一個正整數 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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索