leetcode —— 38. 외관 수열

'외관수열'은 정수 서열로 숫자 1부터 시작하여 서열의 모든 항목은 이전 항목에 대한 설명이다.앞의 다섯 항목은 다음과 같다.
1->1 2->11 3->21 4->1211 5->111221
2의 11은 이전 서열 1이 1개로 표시된 것을 나타낸다.3중의 21은 2중의 11을 2개의 1로 나타내고 순서대로 유추한다.
문제 풀이 사고방식: 귀속을 사용하여 n번째 정수의 출력을 요구하고, n-1번째 수의 서열을 알아야 하며, n-1번째 수의 서열을 알아야 하며, n-2번째 수의 서열을 알아야 하며, 이와 같이 n=1이 돌아올 때까지 추정해야 한다.
구체적인 문제 풀이 코드는 다음과 같다.
# Python3
class Solution:
    def countAndSay(self, n: int) -> str:
        if n == 1:
            return "1"
        string = self.countAndSay(n-1)  #  
        ans = ""
        nums = 1
        temp = string[0]
        for s in string[1:]:
            if s == temp:
                nums += 1
            else:
                ans += (str(nums) + str(temp))
                temp = s
                nums = 1
        ans += (str(nums) + str(temp))
        return ans
# C++
class Solution {
public:
    string countAndSay(int n) {
        if (n == 1)
            return "1";
        string strs = countAndSay(n-1);
        int length = strs.size();
        int nums = 1;
        char temp = strs[0];
        string ans = "";
        for(int i=1;i<length;++i)
        {
            if(strs[i]!=temp)
            {
                ans += ('0'+nums);
                ans += temp;
                temp = strs[i];
                nums = 1;
            }
            else
                nums += 1;
        }
        ans += ('0'+nums);
        ans += temp;
        return ans;
    }
};

좋은 웹페이지 즐겨찾기