Leetcode算法比赛---- Lexicographical Numbers

问题描述

Given an integer n, return 1 - n in lexicographical order.

For example, given 13, return: [1,10,11,12,13,2,3,4,5,6,7,8,9].

Please optimize your algorithm to use less time and space. The input size may be as large as 5,000,000.

Java算法实现

public class Solution {
	public List<Integer> lexicalOrder(int n) {
   	List<Integer>list=new ArrayList<Integer>(n);
    	if(n<=9){
    		for(int i=1;i<=n;i++){
    			list.add(i);
    		}
    	}
    	else{
    		for(int i=1;i<=9;i++){
    			list.add(i);
    			doAdd(list, i, n);//每次doAdd都是把以i开头的数字都加入List中
    		}
    	}
    	return list;
	}

	public static void doAdd(List<Integer>list,int start,int n){
			int moreBit=start*10;
			if(moreBit<=n){
				int ceil=n-moreBit;
				int ans;
				ceil=ceil>9?9:ceil;
				for(int i=0;i<=ceil;i++){
					ans=moreBit+i;
					list.add(ans);
					doAdd(list, ans, n);
				}
			}
	}
}
posted on 2016-08-21 15:07  HorseShoe2016  阅读(445)  评论(1编辑  收藏  举报