字典排列
一个排列是某些对象的有序组合,例如,3124 就是数字 1,2,3,4 的一种可能排列。
如果所有的排列按照数值或者字母序排序,我们称其为一个字典序。
0, 1, 2 的字典排列有:012 021 102 120 201 210。
从 0 到 9 的所有数字构成的字典排列中,第一百万个数字是多少?
答案:2783915460
*思路:*找出从123456789到9876543210之间所有符合条件的数,并数出第一百万个
import java.util.*;
public class Zidiansort {
static boolean isCo(long n){ //判断是否符合0-9不重复
String s=Long.toString(n);
int[] num=new int[10];
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
num[ch-'0']++;
if(num[ch-'0']>=2)
return false;
if(s.length()==9){ //当只有1-9九个数时,数中不能有1
if(num[0]>=1)
return false;
}
}
return true;
}
public static void main(String[] args) {
List<Long> list=new ArrayList<>(); //储存符合的数
int index=0; //记录个数
for(long i=123456789l;i<=9876543210l;i++){
if(isCo(i)){
list.add(i);
index++;
if(index>=1000000)
break;
}
}
System.out.println(list.get(1000000-1));
}
}