您的位置:首页 > 编程语言 > Java开发

[LeetCode][Java] Count and Say

2015-07-13 10:48 543 查看

题目:

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.

题意:

count-and-say 序列是如下面所示的一组整数数列:

1, 11, 21, 1211, 111221, ...

1
读作“一个1”或者11.

11
读作"两个1" 或者 21.

21
读作“一个2”,和“一个1” 或者 1211.

给定一个整数 n,产生第n个序列。

注意:这个生成的整数序列应该用一个字符串表示出来。

算法分析:

* 题目说的实在是太不明白了。。。

* 解释一下就是,输入n,那么我就打出第n行的字符串。

* 怎么确定第n行字符串呢?他的这个是有规律的。

* n = 1时,打印一个1。

* n = 2时,看n=1那一行,念:1个1,所以打印:11。

* n = 3时,看n=2那一行,念:2个1,所以打印:21。

* n = 4时,看n=3那一行,念:一个2一个1,所以打印:1211。

* 以此类推。(注意这里n是从1开始的)

题目不难,直接上代码

AC代码:

public class Solution
{
public  String countAndSay(int n)
{
String subres = "";
if (n==1) return "1";
int sn = 2;
String subinput="1";
while(sn<=n)
{
subres=SubsountandSay(subinput);
subinput=subres;
sn++;
}
return subres;

}
private  String SubsountandSay(String n)
{
String res = "";
String oristring= n;
char tem;
int i = 0;
int startindex=0;
int k=0;
while(i<oristring.length())
{
k=0;
tem='\0';
while(i<oristring.length())
{
if(oristring.charAt(startindex)==oristring.charAt(i))
{
k++;
tem=oristring.charAt(i);
i++;
}
else
{
startindex=i;
break;
}
}
res+=Integer.toString(k)+tem;
}
return res;

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