LeetCode-报数
Posted EmacsDevinkin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-报数相关的知识,希望对你有一定的参考价值。
LeetCode-报数
Table of Contents
1 Easy-报数
1.1 题目描述
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
- 1
- 11
- 21
- 1211
- 111221
1
被读作 "one 1"
( "一个一"
) , 即 11
。
11
被读作 "two 1s"
( "两个一"
), 即 21
。
21
被读作 "one 2"
, "one 1"
( "一个二"
, "一个一"
) , 即 1211
。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
1.2 示例 1:
输入: 1 输出: "1"
1.3 示例 2:
输入: 4 输出: "1211"
2 自己的答案
2.1 思路
- 前一项的报数值的读法为下一项的报数值,即当n为4时候,报数值为1211,所以当n为5的时候,按照n为4时报数值的读法"one 1 one 2 two 1s",报数值为111211
- 简言之,前一项的读法是相邻且相同的计数值+该数字所拼接的字符串.
- 再举例:n为5时报数值的读法是"Three 1s Two 2s one 1",所以n为6时报数值为312211
2.2 反思
- 一开始并没有理解题目的意思,后面在网上找了一下答案才稍微有点思路.
- 编码能力仍需提高.
2.3 代码
package algorithm.easy; public class CounterAndSay { public static String solution(int n) { String old = "1"; while (n > 1) { StringBuilder result = new StringBuilder(); for (int i = 0; i < old.length(); ) { int j = i; while (j < old.length() && old.charAt(i) == old.charAt(j)) { j++; } result.append(j - i).append(old.charAt(i)); i = j; } old = result.toString(); n--; } return old; } public static void main(String[] args) { System.out.println(solution(4)); } }
以上是关于LeetCode-报数的主要内容,如果未能解决你的问题,请参考以下文章