zoukankan      html  css  js  c++  java
  • 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);
    				}
    			}
    	}
    }
  • 相关阅读:
    (转)IDEA ERROR:找不到或无法加载主类
    Piggy-Bank
    Monkey and Banana
    Max Sum Plus Plus
    Doing Homework
    繁繁的游戏
    看试卷
    繁繁的队列
    大整数乘法
    文件操作(c++)
  • 原文地址:https://www.cnblogs.com/dongling/p/5792784.html
Copyright © 2011-2022 走看看