分析一道经典的Java算法笔试题
创始人
2024-04-04 18:32:36
0

Java算法程序题:

该公司笔试题就1个,要求在10分钟内作完。

题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

Java算法基本思路:

1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是***对这6个数字的排列组合结果集。

2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:

1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。

2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果

3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。

采用二维数组定义图结构,***的代码是:

  1. import java.util.Iterator;  
  2. import java.util.TreeSet;  
  3.  
  4. public class TestQuestion {  
  5.  
  6. private String[] b = new String[]{"1", "2", "2", "3", "4", "5"};  
  7. private int n = b.length;  
  8. private boolean[] visited = new boolean[n];  
  9. visited =falsh;  
  10. private int[][] a = new int[n][n];  
  11. private String result = "";  
  12. private TreeSet TreeSet = new TreeSet();  
  13.  
  14. public static void main(String[] args) {  
  15. new TestQuestion().start();  
  16. }  
  17.  
  18. private void start() {  
  19. for (int i = 0; i < n; i++) {  
  20. for (int j = 0; j < n; j++) {  
  21. if (i == j) {  
  22. a[i][j] = 0;  
  23. } else {  
  24.     a[i][j] = 1;  
  25. }  
  26. }  
  27. }a[3][5] = 0;  
  28. a[5][3] = 0;  
  29. for (int i = 0; i < n; i++) {  
  30.     this.depthFirstSearch(i);  
  31. }  
  32. Iterator it = set.iterator();  
  33. while (it.hasNext()) {  
  34. String string = (String) it.next();  
  35.  
  36. if (string.indexOf("4") != 2) {  
  37. System.out.println(string);  
  38. }  
  39. }  
  40. }  
  41.  
  42. private void depthFirstSearch(int startIndex) {  
  43. visited[startIndex] = true;  
  44. resultresult = result + b[startIndex];  
  45. if (result.length() == n) {  
  46. TreeSet .add(result);  
  47. }  
  48. for(int j = 0; j < n; j++) {  
  49. if (a[startIndex][j] == 1 && visited[j] == false) {  
  50. depthFirstSearch(j);  
  51. } else {  
  52. continue;  
  53. }  
  54. }  
  55.     resultresult = result.substring(0, result.length() -1);  
  56.     visited[startIndex] = false;  
  57. }  
  58. }  
  59.  

注:郁闷,花了半个多小时才能写出来,还是看的提示!!!无向图,学数据结构时对他就不是很感冒

【编辑推荐】

  1. Java连接MySQL中文乱码处理
  2. 在Java应用程序中使用Jfreechart配置
  3. Java虚拟机内部构成浅析
  4. 浅谈Java线程的生命周期
  5. 关于Java继承的一些复习

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...