LeetCode算法題-報數


報數序列是指一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下:

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
輸出: "1"

 

示例 2:

輸入: 4
輸出: "1211"

 

解答:

    public static String countAndSay(int n) {
        int result = 1;
        String str = "";
        if (n == 0) return str;
        if (n == 1) return str + result;
        if (n == 2) return str + result + result;
        if (n == 3) return "21";
        str = "21";

        String tempresult = "";
        int sum = 1;  //計數君
        for (int i = 3; i < n; i++) {
            for (int j = 0; j < str.length(); j++) {
                // 在遍歷到末尾前,當前的數與后一個數相等
                if (j != str.length() - 1 && str.charAt(j) == str.charAt(j+1)) {
                    sum++;  // 相鄰且相同的數計數+1
                    continue;
                // 若遍歷到末尾,未位數與前一個數相等
                }else if (j == str.length() - 1 && str.charAt(j) == str.charAt(j-1)){
                    tempresult += sum + String.valueOf(str.charAt(j));
                    sum = 1;    // 已完成報數,計數君重置為0
                }else {
                    tempresult += sum + String.valueOf(str.charAt(j));
                    sum = 1;    // 已完成報數,計數君重置為0
                }
            }
            str = tempresult;
            tempresult = "";

        }
        System.out.println("str:" + str);
        return str;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM