LeetCode-外观数列

144 阅读1分钟

算法记录

LeetCode 题目:

  给定一个正整数 n ,输出外观数列的第 n 项。


说明

一、题目

  「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。

  countAndSay(1) = "1"

  countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。

二、分析

  • 根据题目的示例可以知道,最开始的字符串就是一个 1,然后每往下一层的数据都是对当前层字符的描述。
  • 例如第 n 层是 "11",第 n + 1 层就是 "21",表示上一层有两个一,换个思维就是求相邻的相同元素的个数然后将个数和元素进行拼接组成下一个字符串。
  • n 层只需要循环求取 n 次即可。
class Solution {
    public String countAndSay(int n) {
        String s = "1";
        for(int i = 1; i < n; i++) {
            StringBuilder builder = new StringBuilder();
            char[] chars = s.toCharArray();
            int start = 0;
            for(int j = 0; j < chars.length; j++) {
                if(j < chars.length - 1 && chars[j] == chars[j + 1]) {
                    continue;
                }
                int len = j - start + 1;
                start = j + 1;
                builder.append(len);
                builder.append(chars[j]);
            }
            s = builder.toString();
        }
        return s;
    }
}

总结

编码能力。