问题描述:一个数列:1,11,21,1211,111221。。。。。求第N个数。
用了递归丑陋地实现了一下
import java.util.Arrays;
import java.util.ArrayList;
/**
* @author Biang Hoo
*
* 2013-7-25
*/
public class Look_and_say_sequence {
public static void main(String [] args){
long start = System.currentTimeMillis();
System.out.println(Arrays.toString(getSequence(10)));//求出序列的第10个元素,没有转一下类型,还是数组。。
long stop = System.currentTimeMillis();
System.out.println("time"+(stop-start));
}
static String[] getSequence(int n){
if(n==1){
String []str={"1"};//递归终止条件
return str;
}else{
return countIndexNum(getSequence(n-1));//若n不为1就look and say.
}
}
static String[] countIndexNum(String[] str){//look and say主程序,设当前为Sequence的第N个元素
int num = Integer.parseInt(str[0]);//look到的第一个数
int count=0;//同一个数连续的位数
ArrayList <String> list = new ArrayList<String>();//用Arraylist保存say的结果
for(int i=0;i<str.length;i++){
int temp=Integer.parseInt(str[i]);//取出第N-1个元素对应的从左往右的第i个数
if(temp==num){
count++;//计算一个数连续的位数
}else{
String count_str=Integer.toString(count);
String num_str=Integer.toString(num);
list.add(count_str);//say :count个num;
list.add(num_str);
num=temp;//取该元素的下一个数,并置计数值为1
count=1;
}
if(i==str.length-1){//若当前的数为该元素的最后一位,则say it.
String count_str=Integer.toString(count);
String num_str=Integer.toString(num);
list.add(count_str);
list.add(num_str);
}
}
String [] array = (String[])list.toArray(new String[list.size()]);
return array;
}
}