原题:
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 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 sequence.
Note: The sequence of integers will be represented as a string.
这个题就是按上边的规律,求其顺序第n个的string
解题思想如下:
用一个current表示当前的字符,在for里循环检测,如果检测到的char和current一样,就把这个char的数目++,不一样的情况就更换char和把数目变成1,最后每当检测到不一样的就把上次的sum和char添加到结果的后面。
代码(72ms):
class Solution {
public:
string countAndSay(int n) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
string result = "1";
for (int i = 0 ; i<n-1 ; i++)
result = getNextString(result);
return result;
}
string getNextString(string n){
string result;
char current = n[0];
int sum = 1;
for(int i = 1 ; i < n.size();i++){
if(current==n[i]){
//当前检测的char和current一样,只把sum++
sum++;
}
//当前检测的char和current不一样,需要更换current,把sum变1,
//而且把上次的sum和current加在结果后面
else{
result.append(itos(sum)+current);
sum=1;
current = n[i];
}
}
//把最后一次的结果添加到结果最后
result.append(itos(sum)+current);
return result;
}
string itos(int i)
// 将int 转换成string{
{
stringstream s;
s << i;
return s.str();
}
};