【华为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题库JAVA题解,华为od,java)