Problem:
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.
第一步:记录字符连续重复出现的次数;
第二步:删除重复的字符;
第三步:插入计数。
注意:字符连续重复出现的次数不会超过3,所以插入计数时,只会插入一个字符。
Solution:
public class Solution {
public String countAndSay(int n) {
if(n<=0)
return "";
StringBuilder res = new StringBuilder("1");
while(--n>0)
{
int p = 0,q = 0;
while(p<res.length())
{
while(q<res.length()-1&&res.charAt(q+1)==res.charAt(q))q++;
res.delete(p, q);
res.insert(p, q-p+1);
p += 2;
q = p;
}
}
return res.toString();
}
}
public String countAndSay(int n) {
if(n<=0)
return "";
StringBuilder res = new StringBuilder("1");
while(--n>0)
{
int p = 0,q = 0;
while(p<res.length())
{
while(q<res.length()-1&&res.charAt(q+1)==res.charAt(q))q++;
res.delete(p, q);
res.insert(p, q-p+1);
p += 2;
q = p;
}
}
return res.toString();
}
}