已经知道16个字符,假设为:0123456789abcdef
求这16个字符组成的所有16位字符串,每个字符只出现一次。
总共有16!个的样子。
谁能给一个快速的方法?
求这16个字符组成的所有16位字符串,每个字符只出现一次。
总共有16!个的样子。
谁能给一个快速的方法?
解决方案 »
- 计算成绩或钱。经常遇到结果算完后为100.123456789123.。。后面好多小数如何精确到小数点后几位?
- 无法将 adms.form.logic.Expression 中的 getValue() 应用于 (adms.form.excel.CReport)
- 请问在JList中如何让文本自动换行?
- 怎样过滤汉字里的标点符号
- 通过程序如何向记事本里写文字呀?
- 这样的线程怎样结束??
- 我是刚学JAVA的,我到低应该从哪个地方学起呀?从J2EE 还是JAVA基处?
- Runtime.getRuntime().totalMemory();是得到整个虚拟机内存吗?
- 关于linux下用InetAddress.getLocalhost()只得到127.0.0.1的问题,请各位帮忙。
- 我想把信誉值减到50分。。帮帮忙啦。。。
- 让一个java se程序固定在桌面上,就跟一个标签似的,要怎么做?
- SQL求浮点类型数据和的问题?
char[] src = { '1', '2', 'a' };
g(src, new char[src.length], 0); } private static void g(char[] src, char[] result, int index) {
if (index >= src.length) {
for (int i = 0; i < result.length; i++) {
System.out.print(result[i]);
System.out.print(" ");
}
System.out.println();
return;
} for (int i = 0; i < result.length; i++) {
if (src[i] == 0) {
continue;
} result[index] = src[i];
src[i] = 0;
g(src, result, index + 1);
src[i] = result[index];
} } public static void main(String arg[]) {
g();
}}
//这是一个高手的全排序代码,好用的,测试数据太大会跑很久,就缩减了测试一下
public class Permutation {
public static void main(String[] args) {
Character[] ps = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'}; long timer = System.currentTimeMillis();
int total = 0;
total = fastPermutation(ps, 0);
System.out.println("Got " + total + "\tspend: " + (System.currentTimeMillis() - timer) + "ms");
} public static int fastPermutation(Character[] ps, int pos) {
int cnt = 0;
if (pos < ps.length - 1) {
fastPermutation(ps, pos + 1);
for (int i = pos + 1; i < ps.length; i++) {
swap(ps, pos, i);
cnt += fastPermutation(ps, pos + 1);
swap(ps, pos, i);
}
} else {
cnt++;
//System.out.println(Arrays.toString(ps)); // 打开输出的话,会比较浪费时间。
}
return cnt;
} private static void swap(Character[] ps, int pa, int pb) {
Character tmp = ps[pa];
ps[pa] = ps[pb];
ps[pb] = tmp; }
P12,共计479,001,600(四亿七千九百万),耗时292731毫秒,差不多接近5分钟。
暴力出所有情况。
但是,这是最不效率的方法。应该有很高效的算法。
public class Rank {
private char[] rank;
private boolean[] vist;
private char[] c;
private int size;
public Rank(char[] c){
rank = new char[c.length];
vist = new boolean[c.length];
this.c = c;
size = c.length;
}
public void showAllRank() {
for (int i = 0; i < size; i++) {
vist[i] = false;
}
dfs(0);
}
public void dfs(int level) {
if (level == size) {
for (int i = 0; i < size; i++) {
System.out.print(rank[i]);
}
System.out.println();
} else {
for (int i = 0; i < size; i++) {
if ( !vist[i]) {
vist[i] = true;
rank[level] = c[i];
dfs(level+1);
vist[i] = false; //回溯
}
}
}
}
}public class Test {
public static void main(String[] args) {
char[] c = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
Rank r = new Rank(c);
r.showAllRank(); }
}
关键是要把代码弄出来,然后说服BOSS让他放弃。。
唉。。
哦,让你BOSS把“天河II”租下来,然后把算法调整为支持云计算的,几分钟内还是有希望的。