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;
    }
  • 相关阅读:
    文件的初级功能
    Scanner的用法
    界面制作小例
    初学Java感想
    el-table合计栏未显示的问题
    推荐一些团队博客和个人博客地址
    大数加法
    汇编语言画圆
    Java一个简单的文件工具集
    css选择器
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/10336371.html
Copyright © 2011-2022 走看看