122345面试题

本文介绍了一个关于6个数字(1,2,2,3,4,5)的排列组合问题,其中4不能位于第三位,3和5不能相邻。通过递归算法实现了所有符合条件的排列组合,并给出了具体实现代码。

 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻。

 

    当时做的时候真的是想了好半天,那家公司也不让上机去做,就直接给你张纸,弄的只能想。想做个演算都不行。。最后只做了一半就放那了,回家上网搜到答案一看。自己做不出来也就不怎么懊恼了。 是挺难想的。答案贴出来

 

public class Sorted {
 public static List<String> find(List<String> list) {
  List<String> rtn = new ArrayList<String>();
  String str;
  for (int i = 0; i < list.size(); i++) {
   str = list.get(i);
//   System.out.println("================="+str);
   list.remove(i);
   if (list.size() == 0) {
    rtn.add(str);
   } else {
    List<String> sList = find(list);
    for (String s : sList) {
     rtn.add(str + s);
     if (s.length() == 5) {
      addNumber(str + s);
     }
    }
   }
   list.add(i, str);
  }
  return rtn;
 }

 /**
  * * 通过这个来排除 *
  *
  * @param str
  */
 public static void addNumber(String str) {
  if (str.charAt(2) == '4' || str.contains("35") || str.contains("53")) {
   return;
  }
  set.add(str);
 }

 public static Set<String> set = new TreeSet<String>();

 public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  list.add("1");
  list.add("2");
  list.add("2");
  list.add("3");
  list.add("4");
  list.add("5");
  find(list);
  System.out.println(set.size());
  int cols = 10;
  for (String s : set) {
   System.out.print(s + " ");
   if (cols-- == 1) {
    System.out.println();
    cols = 10;
   }
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值