Count and Say

来源:互联网 发布:php高级工程师 编辑:程序博客网 时间:2024/06/06 03:55

LeetCode 

The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...

1 is read off as "one 1" or 11.
11 is read off as "two 1s" or 21.
21 is read off as "one 2, then one 1" or 1211.

Given an integer n, generate the nth sequence.

Note: The sequence of integers will be represented as a string.

题目的大意就是找到第N个序列的字符串。

1、首先我们发现每一个后面的字符串都严重依赖前面一个字符床,我们想到完全可以通过递归解决的,83.80%。

public class Solution {    public String countAndSay(int n) {       if(n == 1)       {        return "1";    }else{            String ret = countAndSay(n-1);            StringBuffer sb = new StringBuffer();            int count = 1;            int i = 0;            for(i = 0;i < ret.length()-1;i++){                if(ret.charAt(i) == ret.charAt(i+1)){                count ++;                continue;                }else{                sb.append(count);                sb.append(ret.charAt(i)-'0');                count  = 1;                }            }            sb.append(count);            sb.append(ret.charAt(i)-'0');            return sb.toString();   }      }}


2、当然如果可以递归一般都可以不需要递归解决的。战胜了43.38% , 竟然没有递归快

public class Solution {    public String countAndSay(int n) {   String ret = "1";   for(int j = 1;j<n;j++){            int count = 1;            int i = 0;            StringBuffer sb = new StringBuffer();            for(i = 0;i < ret.length()-1;i++){                if(ret.charAt(i) == ret.charAt(i+1)){                count ++;                continue;                }else{                sb.append(count);                sb.append(ret.charAt(i)-'0');                count  = 1;                }            }            sb.append(count);            sb.append(ret.charAt(i)-'0');            ret = sb.toString();   }   return ret;    }}



0 0
原创粉丝点击