描述:
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.
思路:
很有意思的一个题目,由于题目描述的比较简单,刚开始竟然没有读懂。。。
1.题目的意思是给你一个数n,让你输出前n个按照给定规则生成的数字串
2.而生成该数字串的规则为后一个串是前一个串的读法
3.而字符串是如何读的呢?是将该数字串种连续相同的数字进行压缩编码即111读作3个1,即31,11读作2个1,即21,以此类推。
代码:
public String countAndSay(int n)
{
if (n <= 0)
return new String("");
String strNum = "1";
for (int i = 1; i < n; i++)//从"1"开始每次产生一个数字串
{
strNum = getString(strNum);//下一个串在前一个串的基础上进行产生
}
return strNum;
}
public String getString(String strNum)
{
int numLen = strNum.length();
StringBuilder sb = new StringBuilder();
int indexStart = 0, indexEnd = 0;
char ch;
while (indexStart < numLen)//循环一次对每一段连续相同的数字进行统计并编码
{
ch = strNum.charAt(indexStart);
indexEnd = indexStart + 1;
while (indexEnd < numLen && ch == strNum.charAt(indexEnd))
indexEnd++;
sb.append(indexEnd - indexStart);
sb.append(ch);
indexStart = indexEnd;
}
return sb.toString();
}