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月前
【LeetCode 17】5.7四数之和
【LeetCode 17】5.7四数之和
31 1
|
3月前
|
算法
LeetCode第18题四数之和
该文章介绍了 LeetCode 第 18 题四数之和的解法,与三数之和类似,通过先排序,再用双指针确定坐标并去重的方式解决,关键是确定四个坐标,前两个通过两层循环确定,后两个通过首尾双指针确定,同时总结了双指针可减少循环次数,使解决方式更简单高效。
LeetCode第18题四数之和
|
4月前
报数
【7月更文挑战第4天】报数。
95 2
|
6月前
力扣337.打家劫舍3(树形dp)
力扣337.打家劫舍3(树形dp)
|
6月前
[leetcode] 四数之和 M
[leetcode] 四数之和 M
|
6月前
|
Java 测试技术 C++
leetcode-18:四数之和
leetcode-18:四数之和
44 0
|
算法 安全 Swift
LeetCode - #18 四数之和
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
存储 容器
剑指offer 50. 丑数
剑指offer 50. 丑数
62 0
Leecode 18. 四数之和
Leecode 18. 四数之和
50 0