---------------------- android培训、java培训、期待与您交流! ----------------------
有时间看了看张孝祥老师的面试宝典,真是泄气,好多题都答错了,看来靠自己在那里东一拳西一腿的自学,学的真的很不系统!
但是经过琢磨,还是把其中一个问题给搞清了思路,想了半个小时,又花了两个小时才把代码写出来,虽然很慢,也算是解决了问题
找回一点点的自信!!!心里话,这一段打击真的挺大的!
下面是问题和解决代码:
问题:任意数字序列“123456”之类,输出它们所有的排列组合
代码:在eclipse中运行通过
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
/*
* 代码的核心是利用set里面不允许出现重复元素
* 1、糟糕之处在于,如果有重复元素,算法就要重新设计,可扩展性比较差
* 2、整个代码的设计没有用到面向对象的思想
*/
public class AllCombinations {
public static void main(String[] args) {
int[] numbers = {1,2,3,4,5,6};
Set<String> result = new HashSet<String>();
Random random = new Random();
int amount = 720;//这里计算出总共的排列组合数,也是后面退出循环的关键
while (true) {
String string = "";
Set<Integer> num = new HashSet<Integer>();
for(int j=1;j<7;j++){
num.add(j);
}
while(true) {
int index=random.nextInt(numbers.length);
if(num.contains(numbers[index])){string +=numbers[index] ;
//用过后从临时的set中删掉,保证不重复
num.remove(numbers[index]);
}
if(string.length()==6)break;
}
result.add(string);
if (result.size() == amount)
break;
}
Iterator<String> it = result.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
很粗糙,让大家见笑了!!!
稍后,我会重构一下
--------------------- android培训、java培训、期待与您交流! --------------
--------详细请查看:http://edu.csdn.net/heima