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

    题目解析:按照上面所述规则输出第n个数。我们发现,第n个数和第n-1个数之间的关系:从前往后依次统计第n-1个字符串的字符个数,连续出现a个字符x,就在第n个字符串后面添加"ax"。如1211,一个1,一个2,两个1,所以依次添加到第n个字符串中为11 12 21(中间本没有空格,这里是方便理解加了空格)。

    对于这种后一个与前一个有联系的,我们可以使用递归。递归清楚容易理解,而且也快

    递归代码:

    class Solution {
        public String countAndSay(int n) {
           if(n==0)
                    return null;
                if(n==1)
                    return "1";
                else{
                    String s=countAndSay(n-1);
              //通过第n-1个开始计算第n个。 StringBuilder sb
    =new StringBuilder(); char[] c=s.toCharArray(); int count=1;
              //用一个计数器表示当前字母连续出现的次数,将次数和字符加入到字符串后面
    for(int i=1;i<c.length;i++){ if(c[i]==c[i-1]) count++; else{ sb.append(count).append(c[i-1]); count=1;//重新计算下一个连续字符 } }
              //上面操作是进行到最后一个字符跟倒数第二个比较,并没有将最后一个字符加入到字符串中。 sb.append(count).append(c[c.length
    -1]); return sb.toString(); } } }
    当然,也可以不使用递归,就进行n此操作,从第一个到第n个。跟上面递归关键地方差不多,只不过这里是循环

    public String countAndSay(int n) {
        if(n==1) return "1";
        
        String res = "1";
      //n-1此循环
    for(int i=2; i<=n; i++) { res = helper(res); } return res; } 这个方法就是根据上一个字符串,得到该字符串并返回 public String helper(String str) { int count = 1; String res = ""; for(int i=1; i<str.length(); i++) { if(str.charAt(i) == str.charAt(i-1) ) count++; else { res += ((Integer)count).toString() + str.charAt(i-1); count = 1; } } res += count + str.substring(str.length()-1, str.length()); return res; }
  • 相关阅读:
    upgrade和update的区别
    批处理文件的几种路径扩展
    CMD does not support UNC paths as current directories.的巧妙解决方案
    让批处理不回显错误信息
    python中那纠结的os.system()与空格处理
    jQuery Mobel 学习相关资料整理(一)
    c#获取某月的第一天和某月的最后一天
    Umbraco网站制作(七) 调用外部用户控件
    Umbraco网站制作(八) 实现伪静态
    Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8065665.html
Copyright © 2011-2022 走看看