算法小练——报数
title: 算法小练——报数
categories:
- Algorithms
tags: - esay
abbrlink: 867483378
date: 2019-11-08 14:19:52
报数
描述
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
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”
代码
class Solution {
public String countAndSay(int n) {
String ans = "1";
if(n==1){
return ans;
}else {
int time = 0;
StringBuilder stringBuilder = new StringBuilder();
String a =countAndSay(n-1);
char[] chars = a.toCharArray();
for (int i = 0; i < chars.length; i++) {
time++;
if(i+1==chars.length){
stringBuilder.append(time);
stringBuilder.append(chars[i]);
break;
}
if(chars[i]!=chars[i+1]){
stringBuilder.append(time);
stringBuilder.append(chars[i]);
time =0;
}
}
return stringBuilder.toString();
}
}
}
代码效果
执行结果:
通过
显示详情
执行用时 :1 ms, 在所有 java 提交中击败了99.10%的用户
内存消耗 :34 MB, 在所有 java 提交中击败了93.49%的用户
笔记
这道题的难点有两个
- 一个是审题读题,很多人拿到这道题会一脸懵,对题的理解需要认真的读题
- 要求第n个数,则需要求第n-1个,因为已知的其实是 1.1 所以需要用到递归
值得高兴的是,这是自己第一次顺利得写出了递归。