黑马程序员-一一道面试题的解决方法

---------------------- 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值