122345面试题

来源:互联网 发布:中建八局网络教育 编辑:程序博客网 时间:2024/05/29 09:07

 输出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;
   }
  }
 }
}

原创粉丝点击