zoukankan      html  css  js  c++  java
  • 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

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    如何开发一款浏览器[转]
    粒子滤波实现物体跟踪的算法原理:
    Canny边缘检测(转)
    [转载] 图像处理常用边缘检测算子总结
    [转载]Sobel边缘检测
    Android读取手机联系人信息
    【Android】动态注册广播接收器
    Android对话框的生成
    C语言基础丨(六)程序结构——顺序结构【1】
    C语言丨指针基础知识详解
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12207222.html
Copyright © 2011-2022 走看看