Fork me on GitHub

LeetCode 38 Count and Say(字符串规律输出)

 
1—>11—>21—>1211—>111221—>312211—>….
 
按照上面的规律进行求解出第n个字符串是什么。
 
规律:相连的数字有多少个然后添加上这个数字
 
参考代码: 
 
package leetcode_50;


/***
 * 
 * @author pengfei_zheng
 * 按照规律进行求解字符串
 */
public class Solution38 {
    public static String countAndSay(int n) {
        if(n<=0) {
            return "";
        }
        String s="1";
        int times = 1;
        while(times<n){
            s = getSay(s);
            times++;
        }
        return s;
    }
    private static String getSay(String s) {
        int count =0;
        StringBuilder str = new StringBuilder("");
        for(int i = 0; i<s.length(); i++){
            //first to add in order to prevent thinking about the index
            count ++;
            //not reach the end of s and next item is not equal to the pre item
            if ((i< s.length()-1) && (s.charAt(i) != s.charAt(i + 1))) {
                str = str.append(count).append(s.charAt(i));//rebuild the str
                count = 0;//reset count to zero
            }
            else if ((i == s.length()-1)) {//meet the end of s 
                str = str.append(count).append(s.charAt(i));
            }    
        }
        return str.toString();
    }
    public static void main(String[]args){
        String s = countAndSay(2);
        System.out.println(s);
    }
}

 

posted @ 2017-03-11 14:41  伊甸一点  阅读(329)  评论(0编辑  收藏  举报