zoukankan      html  css  js  c++  java
  • Leetcode38--->Count and Say

    题目:给定一个整数n,求出第n个序列,序列规则如下:

    举例:

    1, 11, 21, 1211, 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 sequence.

    解题思路:

    乍一看,感觉好难,因为我不知道第n数是什么,后来发现第2个数其实就是第一个数countAndSay的结果,依次类推,就可以得到第n个数的countAndSay了;

    下面就是要看如何求一个数的countAndSay了:这个还是很简单的,记录第一个数字pre,然后看后面有几个数字和它相等,等到不相等的时候,就将数字和次数的组合加进结果;然后pre等于那个不相等的数字,继续计数,一次类推即可;

    代码如下:

     1 public class Solution {
     2     public String countAndSay(int n) {
     3         if(n < 1)
     4             return "";
     5         String res = "1";
     6         for(int i = 1; i < n; i++)
     7         {
     8             res = doCountAndSay(res);
     9         }
    10         return res;
    11     }
    12     public String doCountAndSay(String res)
    13     {
    14         int count = 0;
    15         char last = res.charAt(0);
    16         StringBuffer sb = new StringBuffer();
    17         int len = res.length();
    18         for(int i = 0; i <= len; i++)  // i == len的时候,表示从某一个位置开始到结尾都是同一个数,因此还需要将结果加入结果集中
    19         {
    20             if(i < len && res.charAt(i) == last)
    21                 count ++;
    22             else
    23             {
    24                 sb.append(String.valueOf(count));
    25                 sb.append(String.valueOf(last));
    26                 count = 1;  // 因此此时i位置的数已经是一个新的数了,所以count初值为1
    27                 if(i < len)
    28                     last = res.charAt(i);
    29             }
    30         }
    31         return sb.toString();
    32     }
    33 }
  • 相关阅读:
    lookup:ID列
    分享几篇文章
    怎样无限制使用smartgit ?
    C++ Win32控制台应用程序捕捉关闭事件
    mt4 在K线上 放文字
    变色指标
    用windows 打包 证书
    监管fca asic nfa 啥啥啥
    sublime 3 build 3126 code ,压缩包在我的360企业云盘里,搜sublime
    个人作业收官——软件工程实践总结
  • 原文地址:https://www.cnblogs.com/leavescy/p/5900792.html
Copyright © 2011-2022 走看看