Leetcode之Count and Say 问题

问题描述:

The count-and-say sequence is the sequence of integers with the first five terms as following:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 is read off as "one 1" or11.

11 is read off as "two 1s" or 21.

21 is read off as "one 2, then one 1" or1211.

Given an integer n, generate the nth term of the count-and-say sequence.

Note: Each term of the sequence of integers will be represented as a string.

示例一:

Input: 1

Output: "1"

示例二:

Input: 4

Output: "1211"

问题来源:Count and Say (详细地址:https://leetcode.com/problems/count-and-say/description/)

思路分析:

       首先我们来理解一下题目的意思,顺着题目给的例子,第一行"1":我们读作1个1,所以标记成11;接着第二行,是"11",我们读作2个1,所以标记成21;接着第三行"21",我们读作1个2和1个1,因此标记成1211;接着第四行,我们读作1个1,1个2,2个1,因此标记成111221.也不知道你们找到规律没?如果没的话,那在这我简单说一下,第一行是"1",标记成11,发现啥没?第二行不就是我们刚才的标记结果吗?不信的话,我们继续,第二行为"11",我们标记成了21,你看,下一行不就是我们的标记结果吗?所以这一行的标记结果就是下一行的输入。

       下面我们谈谈如何解答这道题,首先返回的都是字符串,我们需要一个一个地将字符添加进去,所以在这最好采用StringBuilder,而不直接使用String了,避免产生过多没必要的对象,首先第一行我们必须直接赋值s="1",首先需要一个计数器count,i用来表示哪一行,j用来表示该行字符串的哪个字符,如果这个字符等于它后面的一个 字符的话,我们不需要干别的,只需要count++,然后j++;反之,如果不相等或者已经走到最后一个字符了的话,我们需要做的就多一些了,说先需要把当前的计数器累加上,再加上是什么字符,最后计数器得重新开始计数。每遍历完一行,我们就需要将它保存下来,作为下一行的输入使用。

代码:

Leetcode之Count and Say 问题