LeetCode之Count and Say
1、题目
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"
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 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"
Exapmle
// 1 1
// 2 11
// 3 21
// 4 1211
// 5 111221
// 6 312211
// 7 13112221
2、代码实现
public class Solution {
public String returnLast(String s) {
if (s == null || s.length() == 0)
return null;
String result = "";
int length = s.length();
if (length == 1) {
return "1" + s;
}
int count = 1;
int init = s.charAt(0);
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == s.charAt(i - 1)) {
count++;
if (i == length - 1) {
char ss = s.charAt(i - 1);
result = result + count + s.charAt(i - 1);
}
} else {
char ss = s.charAt(i - 1);
result = result + count + s.charAt(i - 1);
count = 1;
if (i == length - 1) {
result += ("1" + s.charAt(i));
}
}
}
return result;
}
public String countAndSay(int n) {
if (n <= 0)
return null;
if (n == 1)
return "1";
else {
return returnLast(countAndSay(n - 1));
}
}
}
3、总结
1、用递归方法
2、我们递归的时候,先实现默认包含字符串,如何得到下一个字符串,这也是我们需要把每次得到的结果递归,所以,我们先写个函数简单实现从这个字符串如果得到下一个字符串
3、我们在写递归公共函数的实现时候,要注意,末尾和数字前一位是否相同和不同的情况。
赞 (0)