38. Count and Say

一、题目

  1、审题

  

  2、分析

    ①当 n = 1, 输出 1,

    ② n = 2, ①读作 1个1,输出 11

    ③ n = 3, ②读作2个1,输出 21

    ④ n = 4, ③读作1个2,1个1,输出 1211

    ⑤ n = 5, ④读作1个1,1个2,2个1,输出 111221

    ...

 

二、解答

  1、思路:

      ①当 n = 1,时,返回 字符串 1;

      ②当 n > 1 时,调用循环计算出每一次上一步所返回的字符串,记作 sumStr;

      ③ 将sumStr依次截取最后一个字符,并记录连续相同字符的个数,最终逆序拼接起来即为所要求的字符串。

 

 

class Solution {
    public String countAndSay(int n) {

        if(n ==1)
            return "1";

        String numString = "1";
        for(int i = 2; i <= n; i++) {
            numString = readNum(numString);
        }

        return numString;
    }

    public  String readNum(String numString) {

        StringBuffer sb = new StringBuffer("");

        ArrayList<Integer> list = new ArrayList<Integer>();
        int count = 0;
        while(!numString.equals("")) {
            int len = numString.length();
            int tmp = numString.charAt(len - 1) - '0';

            numString = numString.substring(0,len - 1);

            list.add(tmp);
        }

        while(!list.isEmpty()) {
            int target = list.remove(0);
            int target_num = 1;
            while(!list.isEmpty() && list.get(0) == target) {
                target_num++;
                list.remove(0);
            }

            sb.insert(0, target_num*10 + target);;
        }

        return sb.toString();
    }
}

 

posted @ 2018-09-03 19:51  skillking2  阅读(214)  评论(0编辑  收藏  举报