报数

描述

报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示:

1, 11, 21, 1211, 111221, ...

1 读作 "one 1" -> 11.

11 读作 "two 1s" -> 21.

21 读作 "one 2, then one 1" -> 1211.

给定一个整数 n, 返回 第 n 个顺序。

注意事项

整数的顺序将表示为一个字符串。

样例
给定 n = 5, 返回 "111221".

考察点
  • 遍历字符串
答案
public String countAndSay(int n) {
    // Write your code here
    if (n <= 0) {
        return "";
    }
    if (n == 1) {
        return "1";
    }
    if (n == 2) {
        return "11";
    }
    String numStr = "11";
    for (int j = 0; j < n - 2; j++) {
        numStr = handleNum(numStr);
    }
    return numStr;
}

public String handleNum(String num) {
    String result = "";
    List<String> strNum = new ArrayList<>();
    List<Integer> strNumInt = new ArrayList<>();
    int size = num.length();
    for (int i = 0; i < size; i++) {
        char char1 = num.charAt(i);
        int tmpNum = 0;
        for (int j = i; j < size; j++) {
            char tmpChar = num.charAt(j);
            if (tmpChar == char1) {
                tmpNum += 1;
                i = j;
            } else {
                break;
            }
        }

        strNum.add(char1 + "");
        strNumInt.add(tmpNum);
    }
    for (int i = 0; i < strNum.size(); i++) {
        result += strNumInt.get(i) + strNum.get(i);
    }
    return result;
}