LeetCode . 报数( Count and Say)

题目
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

  1. 1
  2. 11
  3. 21
  4. 1211
  5. 111221
    1 被读作 “one 1” (“一个一”) , 即 11。
    11 被读作 “two 1s” (“两个一”), 即 21。
    21 被读作 “one 2”, “one 1” (”一个二” , “一个一”) , 即 1211。
    给定一个正整数 n ,输出报数序列的第 n 项。
    注意:整数顺序将表示为一个字符串。
    示例
    输入: 1
    输出: “1”
    示例 2:
    输入: 4
    输出: “1211”
    解题思路:报数,根据前一个字符串推断后一个字符串,分别对前一个字符串的字节报数,很容易想到递归,但是递归效率太低,LeetCode验证未通过,这里就不放代码了。以下用的循环实现:
public String countAndSay(int n) {
         String s ="1";
         if(n==1){
             return s;
         }
          int i=1;    
          while(i<n){
              char[] sArray = s.toCharArray();
              int num =1;
              String a ="";
              for(int j=0;j<sArray.length;j++){
                  StringBuffer sBuffer = new StringBuffer();
                  if(j+1<sArray.length &&sArray[j]==sArray[j+1]){
                      num++;
                  }else{
                      sBuffer.append(num+String.valueOf(sArray[j]));
                      num=1;
                  }
                  a+=sBuffer.toString(); 
                  s=a;
              }
              i++;
          }
          return s;
        }

题目地址:https://leetcode-cn.com/problems/count-and-say/description/

猜你喜欢

转载自blog.csdn.net/qq_35033270/article/details/80672674