天天看點

java報數編碼_leetcode 報數 java

規律不多說,可以去LeetCode看評論。

其實我很早就想到了解法,但是用 JAVA 我比較陌生,一直用代碼實作不了解法。

幾個月沒做題,腦子比較遲鈍,這個題目做了大概 3 小時 。

思路:

模拟規律,用循環做。

1.初始化 str = “1”;

2.一個循環,循環的層數即是 n 。

3.用一個 pre 記錄 str 的第一個值。用一個 count = 1,代表目前隻有一個重複的 pre 。設定一個stringBulider 類,為 ans。

4.再用一個循環,循環的層數代表的 str 的長度 - 1 (下标從 1 開始, 因為我們設定了 一個 pre,這個 pre 就是 str 的第 0 個元素)。    在這個循環裡面去設定一個 c ,c 與pre 相等的時候,count ++ 。 如果不相等,用 ans.append(count).append(pre)。 然後 pre = c, count = 1;

5.讓str = ans.toString 。 繼續做循環

6.第一個循環結束,傳回str,即是答案。

和 JAVA 有關的知識點:

1. stringBulider 類, append 方法。

2.String 類,charAt 方法。 toString 方法。

通過代碼:

class Solution {

public String countAndSay(int n) {

String str = "1";

for(int i = 0; i < n-1; i++)

{

int count = 1;

StringBuilder ans = new StringBuilder();

char pre = str.charAt(0);

for(int j = 1; j < str.length(); j++){

char c = str.charAt(j);

if(c == pre){

count++;

}else{

ans.append(count).append(pre);

pre = c;

count = 1;

}

}

ans.append(count).append(pre);

str = ans.toString();

}

return str;

}

}