LeetCode(51)- Count and Say


タイトル:

The count-and-say sequence is the sequence of integers beginning as follows:
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.

Note: The sequence of integers will be represented as a string.

構想

  • 題意:1つの整数文字列が与えられ、次は前の記述、例えば「11122121」が与えられ、次は3つの1,3つの2,2つの1が与えられ、「313131221」が与えられ、nが与えられ、n番目の整数文字列
  • が求める.
  • 肝心なのは現在と前の関係を見つけて、1つの整数文字列の要素を比較して、隣接するかどうか、変数numで連続的に同じ個数を統計して、同じにしたくない時、stringBuffer.append(num).append(要素)、num=1;同時にnum++;
  • -

    コード:

    public class Solution {
        public String countAndSay(int n) {
            String str = "1";
            for(int i = 1;i < n;i++){
                int num = 1;
                StringBuffer sb = new StringBuffer();
                for(int j = 1;j < str.length();j++){
                    if(str.charAt(j) == str.charAt(j-1)){
                    num++;
                }else{
                    sb.append(num).append(str.charAt(j-1));
                    num = 1;
                     }
                }
                sb.append(num).append(str.charAt(str.length()-1));
                str = sb.toString();
            }
            return str;
        }
    }