java算法之字符组合排序

Java字符组合排序,不是特别难的题目,暴力算和用图论算(深度遍历)都可以,结果是198.图论的话就是构造无向图,然后深度优先递归。
题目:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

java代码:

 
 
  1. package com.graphic;  
  2. import java.util.Iterator;  
  3. import java.util.TreeSet;  
  4. public class CharSequence {  
  5. private String[] c = {"1","2","2","3","4","5"};  
  6. private int n = c.length;  
  7. private boolean[] visited = new boolean[n];  
  8. private int[][] g = new int[n][n];  
  9. private TreeSet ts = new TreeSet();  
  10. private String result = "";  
  11. public CharSequence(){  
  12. for(int i=0; i  
  13. for(int j=0; j  
  14. if(i == j) g[i][j] = 0;  
  15. else g[i][j] = 1;  
  16. }  
  17. }  
  18. g[3][5] = 0;  
  19. g[5][3] = 0;  
  20. }  
  21. public void depthFirst(int index){  
  22. visited[index] = true;  
  23. result += c[index];  
  24. if(result.length() == n){  
  25. ts.add(result);  
  26. resultresult = result.substring(0,result.length()-1);  
  27. visited[index] = false;  
  28. }  
  29. else{  
  30. for(int i=0; i  
  31. if(!visited[i] && g[index][i] == 1){  
  32. depthFirst(i);  
  33. }else continue;  
  34. }  
  35. resultresult = result.substring(0,result.length()-1);  
  36. visited[index] = false;  
  37. }  
  38. }  
  39. public void graphicGet(){  
  40. for(int i=0; i  
  41. depthFirst(i);  
  42. }  
  43. int count = 0;  
  44. System.out.print("图论的结果:");  
  45. Iterator it = ts.iterator();  
  46. while(it.hasNext()){  
  47. String tmp = it.next();  
  48. if(tmp.contains("35")) continue;  
  49. if(tmp.contains("53")) continue;  
  50. if(tmp.charAt(3) == '4') continue;  
  51. System.out.println(tmp);  
  52. count++;  
  53. }  
  54. System.out.println("共计:"+count+"个");  
  55. }  
  56. public void bruteForce(){  
  57. System.out.println("暴力搜的结果:");  
  58. int count = 0;  
  59. for(int i = 122345; i<543222; i++){  
  60. String tmp = ""+i;  
  61. if(tmp.charAt(3) == '4') continue;  
  62. if(tmp.contains("35")) continue;  
  63. if(tmp.contains("53")) continue;  
  64. if(tmp.contains("5") && tmp.contains("4") && tmp.contains("3") && tmp.contains("1"))  
  65. {  
  66. int index = tmp.indexOf("2");  
  67. if(index == -1) continue;  
  68. if(index == tmp.length()-1) continue;  
  69. if(tmp.substring(index+1).contains("2")){  
  70. System.out.println(tmp);  
  71. count++;  
  72. }  
  73. }  
  74. }  
  75. System.out.print("共计:"+count+"个");  
  76. }  
  77. public void recrusive(){  
  78. }  
  79. public static void main(String[] args) {  
  80. CharSequence cs = new CharSequence();  
  81. //图论的方法  
  82. cs.graphicGet();  
  83. //暴力搜索  
  84. cs.bruteForce();  
  85. }  
转载自:http://developer.51cto.com/art/201104/256286.htm

通过例子,希望会对你有帮助。下面一篇将要介绍Java排序算法总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值