Look and Say 序列的Java实现


问题描述:一个数列: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;
	}
}

 




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值