zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    我理解的BFC
    框架设计—选择器模块
    eval 的使用与延展
    Git学习笔记
    CSS3选择器学习笔记
    JavaScript继承学习笔记
    JavaScript原型与原型链学习笔记
    javascript面向对象编程笔记
    GitHub图形界面使用笔记
    HTML5表单学习笔记
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/10336371.html
Copyright © 2011-2022 走看看