The count-and-say sequence is the sequence of integers with the first five terms as following:
i | say |
---|---|
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 where 1 ≤ n ≤ 30, 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”
这道题的描述实在是太难懂了,百度看了别人的解释才明白题目的要求。题目的意思就是第i+1个数描述第i个数的读法 即2中有2个1,则3为21,3中有1个2,1个1,因此4为1211,以此类推。
解法
public String countAndSay(int n) {
if(n<1)
return "";
if(n==1)
return "1";
StringBuilder pre=new StringBuilder("1");
for(int i=2;i<=n;i++)
{
StringBuilder tmp=new StringBuilder();
int count=1;
for(int j=0;j<pre.length();j++)
{
while(j+1<pre.length()&&pre.charAt(j)==pre.charAt(j+1))
{
count++;
j++;
}
tmp.append(count).append(pre.charAt(j));
count=1;
}
pre=tmp;
}
return pre.toString();
}
Runtime: 3 ms, faster than 70.16% of Java online submissions for Count and Say.
Memory Usage: 36.7 MB, less than 63.40% of Java online submissions for Count and Say.