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();
    }
}


总结:


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

目录
相关文章
|
6月前
报数
【7月更文挑战第4天】报数。
127 2
|
7月前
|
算法 索引
【洛谷 P1923】【深基9.例4】求第 k 小的数 题解(快速排序)
该题目要求输入一组不超过5000000个奇数个整数,并找出其中第k小的数,不使用`nth_element`函数,而是通过实现快速排序来解决。样例输入为5个数1, 4, 3, 2, 5,k=1,输出第1小的数即最小值2。代码中定义了快速排序函数`quickSort`和划分函数`partition`,并使用`read`函数读取输入。在主函数中对数组进行排序后输出第k个元素。
67 0
|
7月前
|
机器学习/深度学习
【洛谷 P1271】【深基9.例1】选举学生会 题解(计数排序)
**深基9.例1**选举学生会,使用计数排序解决。给定$n$(≤999)候选人和$m$(≤2000000)选票,需按投票数排序选票。输入含$n$,$m$及$m$个候选人编号;输出排序后编号。示例:5名候选人,10张选票,输出`1 2 2 2 2 2 2 2 5 5`。代码:用数组记录每个候选人得票数,遍历数组打印每个候选人按票数的编号。
43 0
|
8月前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
54 4
leetcode每日一题 2021/4/10 263. 丑数
leetcode每日一题 2021/4/10 263. 丑数
51 0
|
算法 C++ Python
每日算法系列【LeetCode 328】奇偶链表
每日算法系列【LeetCode 328】奇偶链表
107 0
|
算法 Java 流计算
打家劫舍 III(LeetCode 337)
打家劫舍 III(LeetCode 337)
89 0