您的位置:首页 > 其它

leetcode_Count and Say

2015-08-06 20:15 363 查看
描述:

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: