package leetcode38;
import java.util.ArrayList;
/**
* 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.
*
* @author sl
*
*/
public class Solution {
/*
* 此为错误解法,一开始题意理解错误
*/
public String countAndSay1(int n) {
StringBuilder sb = new StringBuilder();
if (n < 1)
return sb.toString();
ArrayList<Integer> number = new ArrayList<Integer>();
int k = n;
int count = 1;
int num;
while (k != 0) {
num = k % 10;
k = k / 10;
number.add(num);
}
if (number.size() == 1) {
sb.append(number.get(0));
}
for (int i = number.size() - 1; i > 0; i--) {
/*
* if(i==number.size()-1){ count=1; }else
* if(number.get(i)==number.get(i+1) && i!=0){ count++; }else
* if(i==0){ sb.append(count+""+number.get(i+1)); //count = 1;
* }else{ sb.append(count+""+number.get(i+1)); count = 1; }
*/
if (i == 1) {
if (number.get(i) != number.get(i - 1)) {
sb.append((count) + "" + number.get(i));
sb.append(1 + "" + number.get(i - 1));
} else {
sb.append((count + 1) + "" + number.get(i));
}
} else /*
* if (i == number.size() - 1) { continue; }
*
* else
*/ if (number.get(i) != number.get(i - 1)) {
sb.append(count + "" + number.get(i));
count = 1;
} else {
count++;
}
}
return sb.toString();
}
/**
* 该函数为正确解法
* @param n
* @return
*/
public String countAndSay(int n) {
StringBuilder sb = new StringBuilder();
if (n < 1)
return sb.toString();
sb.append("1");
if (n == 1)
return sb.toString();
int i = 2;
String str = sb.toString();
if (str.length() == 1) {
sb.append("1");
}
str = sb.toString();
while (i < n) {
int count = 1;
str = sb.toString();
sb.delete(0, sb.length());
for (int j = 0; j < str.length() - 1; j++) {
if (j == str.length() - 2) {
if (str.charAt(j) != str.charAt(j + 1)) {
sb.append(count +"" + str.charAt(j));
sb.append(1 + "" +str.charAt(j + 1));
} else {
sb.append((count + 1) + "" + str.charAt(j));
}
} else {
if (str.charAt(j) != str.charAt(j + 1)) {
sb.append(count + "" +str.charAt(j));
count = 1;
} else {
count++;
}
}
}
i++;
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println(new Solution().countAndSay(1));
System.out.println(new Solution().countAndSay(2));
System.out.println(new Solution().countAndSay(3));
System.out.println(new Solution().countAndSay(4));
System.out.println(new Solution().countAndSay(5));
}
}
leetcode38 Count and Say
最新推荐文章于 2016-02-26 15:19:57 发布