一、題目名稱java
Count and Say(按照數字重複出現計數並生成字符串)app
二、題目地址函數
https://leetcode.com/problems/count-and-say/ui
三、題目內容code
英文:The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ... Given an integer n, generate the nth sequence.leetcode
中文:給出正整數n,返回「count-and-say」序列的第n項開發
說明:字符串
count-and-say序列形如:1, 11, 21, 1211, 111221, ...get
1 被讀做「1個1」(11)input
11 被讀做「2個1」(21)
21 被讀做「1個2,1個1」(1211)
如今給出一個正整數n,生成序列的第n項
四、解題方法1
這道題用最原始的方法經過循環解決就能夠了。
/** * 功能說明:LeetCode 38 - Count and Say * 開發人員:Tsybius2014 * 開發時間:2015年8月7日 */ public class Solution { /** * 按照數字重複出現計數並生成字符串 * @param n 輸入整數 * @return */ public String countAndSay(int n) { if (n <= 1) { return "1"; } String result = "1"; String temp; char curChar = ' '; int counter = 1; while (--n != 0) { temp = ""; //計數 curChar = ' '; counter = 1; for (int i = 0; i < result.length(); i++) { if (curChar == result.charAt(i)) { counter++; } else { if (curChar != ' ') { temp += String.valueOf(counter); temp += String.valueOf(curChar); } curChar = result.charAt(i); counter = 1; } } temp += String.valueOf(counter); temp += String.valueOf(curChar); result = temp; } return result; } }
五、解題方法2
這是我以前採用的一種比較笨的方法,每次求下一項都調用一次函數。
import java.util.ArrayList; /** * 功能說明:LeetCode 38 - Count and Say * 開發人員:Tsybius2014 * 開發時間:2015年8月7日 */ public class Solution { /** * 按照數字重複出現計數並生成字符串 * @param n 輸入整數 * @return */ public String countAndSay(int n) { if (n <= 1) { return "1"; } String result = "1"; while (--n != 0) { result = getNext(result); } return result; } /** * 給定字符串獲取下一個字符串 * @param input 輸入 * @return */ private String getNext(String input) { ArrayList<String> arrayList = new ArrayList<String>(); //計數 char curChar = ' '; int counter = 1; for (char ch : input.toCharArray()) { if (curChar == ch) { counter++; } else { if (curChar != ' ') { arrayList.add(String.valueOf(counter) + String.valueOf(curChar)); } curChar = ch; counter = 1; } } arrayList.add(String.valueOf(counter) + String.valueOf(curChar)); //拼接字符串 StringBuilder stringBuilder = new StringBuilder(); for (String s : arrayList) { stringBuilder.append(s); } return stringBuilder.toString(); } }
END