leetcode-38

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

1. 1
2. 11
3. 21
4. 1211
5. 111221
1 被读作  "one 1"  ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。

注意:整数序列中的每一项将表示为一个字符串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-and-say
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这题主要是分析题意

每一项都是对上一项的描述,比如n = 3时 为 12,那么我们n = 4时,就该表达的意思是描述n = 3的,所以应该是,1个2,1个1,所以就是1211

package Leetcode;

public class Solution {

    public String countAndSay(int n) {
        if (n <= 0) return "-1";

        String result = "1";

        for (int i = 1; i < n; i++) {
            StringBuffer builder = new StringBuffer();
            int index = 0;
            while (index < result.length()) {
                // 记录值
                char val = result.charAt(index);
                // 记录连续位数
                int count = 0;

                // 查找连续位数,碰到不相同的数字时停止。
                while (index < result.length() && result.charAt(index) == val) {
                    index++;
                    count++;
                }

                // 追加连续位数到结果中
                builder.append(String.valueOf(count));
                // 追加连续位数的值到结果中
                builder.append(val);
            }
            result = builder.toString();
        }
        return result;
    }
}

end

猜你喜欢

转载自www.cnblogs.com/CherryTab/p/12207222.html