leetcode:38.报数

简介: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。

题目描述:


报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:


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


1被读作 “one 1” ("一个一") , 即 11。

11被读作 “two 1s” ("两个一"), 即 21。

21被读作 “one 2”, “one 1” ("一个二" , “一个一”) , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。


注意:整数顺序将表示为一个字符串。


示例1:


输入: 1
输出: "1"


示例2:


输入: 4
输出: "1211"


题目难度:简单


分析:


emmmm,刚开始我都没看懂题目,心想简单难度的都这样了吗?后来看懂了题目才明白是怎么一回事,也就是说下一个字符串是根据上一个字符串生成的,明白了这个很容易想到类似的斐波那契数列,也就明白了需要用到递归的方法求解。


代码如下:


class Solution {
    public String countAndSay(int n) {
        StringBuilder sb = new StringBuilder();
        // 递归结束的条件
        if (n == 1) {
            return "1";
        } else {
          // 利用递归求出所有的字符串
            String s = countAndSay(n - 1);
            // 定义临时变量用来确定每次要“读”的字符
            char temp = s.charAt(0);
            // 用来记录连续的字符个数,也就是读作:两个一/二,中的“两”
            int count = 0;
            // 遍历当前字符串
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                // 如果两个字符相等,应该合并,读作:两个一/二
                if (c == temp) {
                    count++;
                } else {
                  // 不等时就把个数和字符添加到结果集,同时初始化临时变量和个数
                    sb.append(String.valueOf(count)).append(temp);
                    temp = c;
                    count = 1;
                }
            }
            sb.append(String.valueOf(count)).append(temp);
        }
        return sb.toString();
    }
}


总结:


关于递归,一定要有一个结束条件,否则就会死循环了。

目录
相关文章
|
1月前
报数
【7月更文挑战第4天】报数。
29 2
|
3月前
|
Java
leetcode-53:最大子序和
leetcode-53:最大子序和
30 0
|
11月前
leetcode:70. 爬楼梯
此题运用递归思想。当只有1个台阶,那么只有1种方法爬到楼顶——跨一个台阶;当有2个台阶时,有2种方法爬到楼顶——跨一个台阶跨两次或直接跨两个台阶。当有3个台阶或更多台阶时,则可以选择先跨一个台阶还是先跨两个台阶,剩下的台阶再进行选择是先跨一个台阶还是先跨两个台阶……从而实现递归
30 0
|
算法 C++ Python
每日算法系列【LeetCode 328】奇偶链表
每日算法系列【LeetCode 328】奇偶链表
|
算法 C++ Python
每日算法系列【LeetCode 386】字典序排数
每日算法系列【LeetCode 386】字典序排数
|
机器学习/深度学习 算法 Java
|
算法 Go Python
LeetCode46:全排列(八皇后)
LeetCode46:全排列(八皇后)
LeetCode46:全排列(八皇后)
LeetCode每日一题(4)——字符的最短距离
LeetCode每日一题(4)字符的最短距离 1.题目 2.示例 3.思路 代码