Java实现数字排列
来源:互联网 发布:如何组建淘宝团队 编辑:程序博客网 时间:2024/05/16 09:55
题目: 用1 2 2 3 4 5 这六个数字,打印出所有的排列,如512234,412325等。
要求:“4”不能在第三位,3与5不能相连。
思路:
1、把问题看成图的遍历问题,6个数字就是6个节点,所有节点的遍历就是6个数字的排列。
2、3与5不能相连,即要求3与5之间不能连通。
3、所有的排列不能有重复的情况,因为六个数字中有两个2,所有肯定会有重复,这里考虑将结果放到Set中去掉重复排列。
4、4不能放在第三位,需要在结果集中去掉不满足题目要求的遍历结果。
import java.util.Iterator;import java.util.Set;import java.util.TreeSet;/** * @author LilyLee * @date 2017年4月26日 * @time 上午9:40:11 * @Version 1.0 * @email lilylee_1213@foxmail.com * */public class DigitalArrangement {private String[] b=new String[]{"1","2","2","3","4","5"};private int len=b.length;private boolean[] visited=new boolean[len];private int [][] a=new int[len][len];private String result="";private TreeSet set=new TreeSet();public static void main(String[] args) {new DigitalArrangement().function();}private void function(){for(int i=0;i<len;i++){for(int j=0;j<len;j++){if(i==j){a[i][j]=0;}else{a[i][j]=1;}}}a[3][5]=0;a[5][3]=0;for(int i=0;i<len;i++){this.depthFirstSearch(i);}Iterator it=set.iterator();while(it.hasNext()){String ss=(String)it.next();if(ss.indexOf("4")!=2){System.out.println(ss);}}}private void depthFirstSearch(int index){visited[index]=true;result+=b[index];if(result.length()==len){set.add(result);}for(int j=0;j<len;j++){if(a[index][j]==1&&visited[j]==false){depthFirstSearch(j);}else{continue;}}result=result.substring(0, result.length()-1);visited[index]=false;}}
最终的输出是:
122345
122543
123245
123254
123425
123452
125234
125243
125423
125432
132245
132254
132425
132452
132524
132542
142325
142523
143225
143252
145223
145232
152234
152243
152324
152342
152423
152432
212345
212543
213245
213254
213425
213452
215234
215243
215423
215432
221345
221543
223145
223154
223415
223451
225134
225143
225413
225431
231245
231254
231425
231452
231524
231542
232145
232154
232415
232451
232514
232541
241325
241523
242315
242513
243125
243152
243215
243251
245123
245132
245213
245231
251234
251243
251324
251342
251423
251432
252134
252143
252314
252341
252413
252431
312245
312254
312425
312452
312524
312542
315224
315242
315422
321245
321254
321425
321452
321524
321542
322145
322154
322415
322451
322514
322541
325124
325142
325214
325241
325412
325421
341225
341252
341522
342125
342152
342215
342251
342512
342521
345122
345212
345221
412325
412523
413225
413252
415223
415232
421325
421523
422315
422513
423125
423152
423215
423251
425123
425132
425213
425231
431225
431252
431522
432125
432152
432215
432251
432512
432521
451223
451232
451322
452123
452132
452213
452231
452312
452321
512234
512243
512324
512342
512423
512432
513224
513242
513422
521234
521243
521324
521342
521423
521432
522134
522143
522314
522341
522413
522431
523124
523142
523214
523241
523412
523421
541223
541232
541322
542123
542132
542213
542231
542312
542321
543122
543212
543221
- Java实现数字排列
- 全排列的java实现(含重复数字)
- 数字全排列返回list的list:java实现
- java 实现 排列 组合
- java实现全排列
- java实现全排列
- java全排列实现
- Java实现全排列
- Java实现泛型全排列
- Java实现全排列
- java实现全排列
- java实现全排列
- Java实现全排列
- 全排列java实现
- java实现全排列
- java实现全排列
- java实现全排列
- Java实现全排列
- ajax表单和form表单提交的区别
- 哲学家就餐问题(java实现)
- 通过Revit API创建一个族并载入到工程文档中
- Java程序员的日常——经验贴(纯干货)
- Android 常见工具类封装
- Java实现数字排列
- 最多n次购买时股票最大收益问题
- mybatis+spring的TODO小项目记录(四)使用github管理代码
- 2017京东校招终结者问题
- 十一javascript篇之数组,变量,函数调用说明案例实战
- Android Logcat 封装类
- C#的WinForm开发监控系统案例
- RGB/YUV格式详解
- 使用SVG中的Symbol元素制作Icon