leetcode38. Count and Say
问题描述:
The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
is read off as "one 1"
or 11
.11
is read off as "two 1s"
or 21
.21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1 Output: "1"
Example 2:
Input: 4 Output: "1211"
问题思路:
讲真这道题我一开始没懂。。
然后看了别人的解说,才明白的( ̄▽ ̄)
就是说给你一个一个数字,要你读出上一个数字的组成
最底层情况是1,1就是“1”,到了2, 因为有1个1,所以是“11”,到了3读2的,就是“21”,所以到了4读3的就是“1211”
所以我们要从字符串下标开始读,读相同个数的数字,然后记录到返回的字符串中。
需要注意的是!1就是“1” 而非“11”!,所以判断条件应该为(i-- > 0)
代码:
class Solution { public: string countAndSay(int n) { string s = "1"; while(--n > 0){ string cur = ""; for(int i = 0; i < s.size(); i++){ int count = 1; while(i + 1 < s.size() && s[i] == s[i+1]){ count++; i++; } cur += to_string(count) + s[i]; } s = cur; } return s; } };