欧拉工程第24题:Lexicographic permutations

题目链接:https://projecteuler.net/problem=24
题意:0123456789我们知道有10!个不同的排序,如果按字典排序,求第1000000个数字是多少?这题用笔和纸即可完成,只是有点麻烦了,首先确定第一位,0开头的一共有9!个排序,1….9同样,所以,第一个数字可确定为999999/9!,即为2。等同于求013456789的第(999999-2 * 9!)位的排序,按照确定第一位的方法,一样解决了

首位是0: 1—9! =1—362880
首位是1:362881—725760
首位是2:725761—1088640

下面以此类推。。。

package projecteuler21to30;

import java.util.Date;

class level24{
    void solve(){
        int[] fact={1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
        String str="0123456789";
        int l=999999;
        String s1="";
        for(int i=fact.length-1;i>=0;i--){
            int num=l/fact[i];
            s1+=str.charAt(num);
            l-=num*fact[i];
            str=str.substring(0,num)+str.substring(num+1);
        }
        System.out.println(s1+str);
    }
}
public class Problem24 {
    public static void main(String[] args){
    Date beginTime=new Date();
    new level24().solve();//2783915460
    Date endTime=new Date();
    long Time = endTime.getTime()-beginTime.getTime();
    System.out.println("Time:"+Time/1000+"秒"+Time%1000+"毫秒");
    }
}

你可能感兴趣的:(java,欧拉工程)