題型解說
這是一題難度為簡單的題目
需要設計一個方法,此方法會傳入一個整數 n,將 n 計數轉換後回傳
一開始看到這一題無法第一時間理解意思
後來找了下中文翻譯後總算了解題目是想要說什麼
範例:
n = 1,直接回傳 1
n = 2,需要回傳 11,因為 n = 1 時是回傳 1,所以用語言說的話就是 1 個 1 => 11
n = 3,需要回傳 21,因為 n = 2 的時候是 2 個 1
n = 4,需要回傳 1211,因為 n = 3 的時候是 1 個 2、1 個 1
解題思路
這題可以直接用遞迴來解,如果 n = 1 或 n = 2 的時候直接回傳答案
如果 n = 3 或以上,則利用一個迴圈和一個計數器來轉換結果
程式碼
Java
class Solution {
public String countAndSay(int n) {
if (n == 1) {
return "1";
}
if (n == 2) {
return "11";
}
String temp = countAndSay(n - 1);
StringBuilder sb = new StringBuilder();
int count = 1;
for (int i = 1, len = temp.length(); i < len; i++) {
// 如果和前一個字元不同的話,就將當前計數結果加入
if (temp.charAt(i) != temp.charAt(i - 1)) {
sb.append(count).append(temp.charAt(i - 1));
count = 1;
} else {
count++;
}
// 邊界處理
if (i == len - 1) {
sb.append(count).append(count == 1? temp.charAt(i): temp.charAt(i - 1));
}
}
return sb.toString();
}
}