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月前
|
算法 C++
Leetcode第53题(最大子数组和)
这篇文章介绍了LeetCode第53题“最大子数组和”的动态规划解法,提供了详细的状态转移方程和C++代码实现,并讨论了其他算法如贪心、分治、改进动态规划和分块累计法。
60 0
|
4月前
报数
【7月更文挑战第4天】报数。
97 2
|
6月前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
43 4
|
算法 C++ Python
每日算法系列【LeetCode 328】奇偶链表
每日算法系列【LeetCode 328】奇偶链表
|
算法 C++ Python
每日算法系列【LeetCode 386】字典序排数
每日算法系列【LeetCode 386】字典序排数
|
算法
leetcode 53 最大子数组和
leetcode 53 最大子数组和
59 0
leetcode 53 最大子数组和
|
机器学习/深度学习 测试技术
【LeetCode】最大子数组和
【LeetCode】最大子数组和
【LeetCode】最大子数组和
|
算法
LeetCode每日一题(3)——字典序排数
LeetCode每日一题(3)字典序排数 1.题目 2.示例 3.思路 4.代码
|
算法 Java 测试技术
LeetCode每日一题-3:回文链表
LeetCode每日一题-3:回文链表