本文主要是介绍【华为OD题库-070】数列描述-java,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
题目描述:
有一个数列A[n],从A[0]开始每一项都是一个数字,数列中A[n+1]都是A[n]的描述,其中A[0]=1,规则如下;
A[0]:1
A[1]:11 含义其中A[0]=1是1个1即11,表示A[0]从左到右连续出现了1次1
A[2]:21 含义其中A[1]=11是2个1即21,表示A[1]从左到右连续出现了2次1
A[3]1211 含义其中A[2]从左到右是由一个2和一个1组成即1211,表示A[2]从左到右连续出现了一次2又连续出现了一次1
A[4]:111221 含义A[3]=1211从左到右是由一个1和一个2两个1即111221,表示A[3]从左到右连续出现了一次1又连续出现了一次2又连续出现了2次1
输出第n项的结果
0<=n<=59
输入描述:
数列第n项:0<= n <=594
输出描述
数列内容: 111221
示例1:
输入
4
输出
111221
思路
按照题目描述,统计某个字符串中某个字符连续出现的次数,即可根据上一个值,推出下一个值
题解
package hwod;import java.util.Scanner;public class NumSequence {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println(numSequence(n));}private static String numSequence(int n) {String lst = "1";for (int i = 0; i < n; i++) {lst = getNextStr(lst);}return lst;}private static String getNextStr(String str) {StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {int k = i + 1;while (k < str.length() && str.charAt(k) == str.charAt(i)) k++;sb.append(k - i).append(str.charAt(i));i = k-1;}return sb.toString();}
}
推荐
如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。
这篇关于【华为OD题库-070】数列描述-java的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!