lintcode 报数(Count and Say) (Java)

xiaoxiao2021-02-28  92

题目

报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示: 1, 11, 21, 1211, 111221, … 1 读作 “one 1” -> 11. 11 读作 “two 1s” -> 21. 21 读作 “one 2, then one 1” -> 1211. 给定一个整数 n, 返回 第 n 个顺序。 注意事项 整数的顺序将表示为一个字符串。

样例

给定 n = 5, 返回 “111221”.

分析

想得到下一个数是多少,首先要循环当前数,在循环的同时对相同的数进行计数,当碰到两个数不同时进行字符串拼接(数目+当前数),计数置为1。

代码

public class Solution { /** * @param n the nth * @return the nth sequence */ public String countAndSay(int n) { // Write your code here String s = "1"; int i = 1; while (i < n){ //进行 s = count(s); i ++; } return s; } public String count(String a){ char[] chars = a.toCharArray(); //计数 int num = 1; StringBuffer buffer = new StringBuffer(); for(int i = 1; i < chars.length ; i++){ if (chars[i-1] == chars[i]){ num++; }else { buffer.append(num + String.valueOf(chars[i-1])); num = 1; } } //拼接最后一个 buffer.append(num + String.valueOf(chars[chars.length - 1])); return buffer.toString(); } }

题目地址:http://www.lintcode.com/zh-cn/problem/count-and-say/

转载请注明原文地址: https://www.6miu.com/read-74251.html

最新回复(0)