報數
報數指的是,按照其中的整數的順序進行報數,然後得到下一個數。如下所示:
1, 11, 21, 1211, 111221, ...
1
讀作 "one 1"
-> 11
.
11
讀作 "two 1s"
-> 21
.
21
讀作 "one 2, then one 1"
-> 1211
.
給定一個整數 n
, 返回 第 n
個順序。
注意事項
整數的順序將表示爲一個字符串。
您在真實的面試中是否遇到過這個題? Yes
樣例
給定 n = 5
, 返回 "111221"
.
分析:這道題要用到簡單的動態規劃,算出前面的一個順序才能繼續。核心算法爲判斷相鄰兩個數是否相等,如果相等就記錄下連續相等的個數,在第一次不想等處計算一次。
class Solution {
public:
/*
* @param n: the nth
* @return: the nth sequence
*/
string countAndSay(int n) {
// write your code here
string s="1";
if(n==1)
return s;
while(--n){
string tmp="";
int count=1;
for(int i=1;i<s.size();i++){
if(s[i]==s[i-1]){
count++;
}
else
{
tmp+=to_string(count)+s[i-1];//
//to_string int轉string;
//這裏總是加上一個數,所以最後的一個數要額外補上 count=1; } } tmp+=to_string(count)+s.back();//最後的字符串加上,back()返回string的隨後一個字符串 s=tmp; } return s; }};