• 38. Count and Say


    The count-and-say sequence is the sequence of integers with the first five terms as following:

    1.     1
    2.     11
    3.     21
    4.     1211
    5.     111221
    

    1 is read off as "one 1" or 11.
    11 is read off as "two 1s" or 21.
    21 is read off as "one 2, then one 1" or 1211.

    Given an integer n where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence.

    Note: Each term of the sequence of integers will be represented as a string.

    Example 1:

    Input: 1
    Output: "1"
    

    Example 2:

    Input: 4
    Output: "1211"
    
    
    class Solution {
    public String countAndSay(int n) {
            StringBuilder sb1 = new StringBuilder("1"), sb2 = sb1;
            while(--n > 0){
                sb2 = new StringBuilder();//初始化外部循环
                int c = 1, i = 0;   //c表示charAt(i)重复的次数
                char[] ch = sb1.toString().toCharArray();
                //开始count的标志
                while(i < sb1.length()){
                    if(i+1 < sb1.length() && ch[i] == ch[i+1]) ++c; //重复就++c
                    else{//不重复或到达边界就将当前char存入sb2,c回归1
                        sb2.append(c).append(ch[i]);
                        c = 1;
                    }
                    ++i;
                }
                sb1 = sb2;
            }
            
            return sb1.toString();
        }
    }
    
    
    
     

    来自leetcode,高效简洁

    public String countAndSay(int n) {
        String res = "1";
        //从第一行开始,一行一行产生
        while (n > 1) {
            String temp = "";
            for (int i = 0; i < res.length(); i++) {
                int num = getRepeatNum(res.substring(i));
                temp = temp + num + "" + res.charAt(i);
                //跳过重复的字符
                i = i + num - 1;
            }
            n--;
            //更新
            res = temp;
        }
        return res;
    
    }
    //得到字符 string[0] 的重复个数,例如 "111221" 返回 3
    private int getRepeatNum(String string) {
        int count = 1;
        char same = string.charAt(0);
        for (int i = 1; i < string.length(); i++) {
            if (same == string.charAt(i)) {
                count++;
            } else {
                break;
            }
        }
        return count;
    }
  • 相关阅读:
    各种小例子
    作业 5/20
    课程总结
    构建之法 读书笔记一
    Android实现本地音频播放(可拖动条)
    自我介绍
    上周总结
    《梦断代码》读书笔记三
    《梦断代码》读书笔记二
    《梦断代码》读书笔记一
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/10336371.html
Copyright © 2020-2023  润新知