--- tags: Cmoney_Java題目 --- Java_Cmoney_st207 ===  1.需要的 function --- 這種數列叫外觀數列,解答是[參考](https://leetcode.com/problems/count-and-say/discuss/16040/Straightforward-Java-Solution) 想法是做兩個 function 1. 輸入字串,產生下一個字串的樣子 2. 迴圈,因為每一個字串都可以從上1個推 1.1 產生下一個在外觀數列的字串 --- 例如 輸入 1 1 會輸出 2 1 輸入 2 1 會輸出 1 2 1 1 1. 首先建立 StringBuilder 方便串接字串 2. 建立 int count 紀錄這個數字出現幾次,因為一定有出現過所以設為1 3. 建立 char c 紀錄輸入進來的字串 s 的第一個字元,由左到右製作下個字串 4. 迴圈,由左到右讀取字元,並記錄次數 5. 如果遇到和第一個字元相同的就 count++ 6. 否則輸出結果,串接記錄到幾個(count),串接是幾個數字( c ) 此外在更換 c 成第 i 個的字元,還有 count = 1, 因為算第 i 個的數量,進入下一個迴圈 7. 假如是最後一組,不論是不一樣的(例如 2 1),或一樣的例如(1 2 1 1),跳出迴圈後,要把最後一組也輸出,串接記錄到幾個(count),串接是幾個數字( c ) 8. 回傳時,要轉回String ```java= public static String ci(String s) { StringBuilder sb = new StringBuilder(); int count = 1; char c = s.charAt(0); for (int i = 1; i < s.length(); i++) { if(s.charAt(i) == c) count++; else{ sb.append(count); sb.append(c); c = s.charAt(i); count = 1; } } sb.append(count); sb.append(c); return sb.toString(); } ``` 1.2 使用上個函數的迴圈 --- 外觀數列第1個是 1 ,所以第二圈是 1 1 ,第三圈 2 1 ,以此類推 ```java= public static String cas(int n) { String s = "1"; for (int i = 1; i < n; i++) { s = ci(s); } return s; } ``` 2.主程式 --- 只要輸入要看第幾個外觀數列就好 ```java= public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(cas(sc.nextInt())); } ``` 3.完整程式 --- ```java= import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(cas(sc.nextInt())); } public static String cas(int n) { String s = "1"; for (int i = 1; i < n; i++) { s = ci(s); } return s; } public static String ci(String s) { StringBuilder sb = new StringBuilder(); int count = 1; char c = s.charAt(0); for (int i = 1; i < s.length(); i++) { if(s.charAt(i) == c) count++; else{ sb.append(count); sb.append(c); c = s.charAt(i); count = 1; } } sb.append(count); sb.append(c); return sb.toString(); } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up