leetcode之Count and Say报数
生活随笔
收集整理的這篇文章主要介紹了
leetcode之Count and Say报数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目鏈接:Count and Say報(bào)數(shù)
一開始試圖找規(guī)律,直接寫了個簡單粗暴的代碼,跑起來好像沒發(fā)現(xiàn)規(guī)律。
試著提交居然過了,但是速度比較慢,就改進(jìn)了下代碼。
按題意來的簡單粗暴的代碼(40ms)如下:
之后做了一些改進(jìn)(5ms),這樣的改進(jìn),測試數(shù)據(jù)組數(shù)越多,效果越明顯
public class CountAndSay { /*改進(jìn):* 1.第一次提交后發(fā)現(xiàn)n貌似不是特別大* n范圍好像是1--57* 所以可以使用一個List<StringBuilder>來* 存我們求n時計(jì)算的n-1,n-2,....,3,2,1避免了一些重復(fù)計(jì)算* 2.直接使用StringBuilder,* 比List<Integer>轉(zhuǎn)String減少了個循環(huán),* 3.至于為何不直接用String,* 這樣StringBuilder到toString都免了,* 請自行百度StringBuilder與String順帶個StringBuffer* */ private static List<StringBuilder> list = new ArrayList<StringBuilder>(60);static {list.add(new StringBuilder("1")); }public String countAndSay(int n) {if (list.size() > n - 1) {if (n - 1 < 0) return null;return ((StringBuilder)list.get(n - 1)).toString();} else {StringBuilder arr = (StringBuilder)list.get(list.size() - 1);StringBuilder res = new StringBuilder();for (int i = list.size(); i < n; i++) {int count = 0;char pre = 0;for (int k = 0; k < arr.length(); k++) {if (arr.charAt(k) != pre) {if (count > 0) res.append(count).append(pre);count = 1;pre = arr.charAt(k);} else count++;}res.append(count).append(pre);arr = res;res = new StringBuilder(); list.add(arr);}return arr.toString();} } }總結(jié)
以上是生活随笔為你收集整理的leetcode之Count and Say报数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬核干货,老曹解密“语音交互”背后的黑科
- 下一篇: 数据中台建设五步法(文末赠书)