java算法之字符组合排序
2014-11-12 16:45
253 查看
Java字符组合排序,不是特别难的题目,暴力算和用图论算(深度遍历)都可以,结果是198.图论的话就是构造无向图,然后深度优先递归。
题目:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
java代码:
通过例子,希望会对你有帮助。下面一篇将要介绍Java排序算法总结。
题目:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
java代码:
package com.graphic; import java.util.Iterator; import java.util.TreeSet; public class CharSequence { private String[] c = {"1","2","2","3","4","5"}; private int n = c.length; private boolean[] visited = new boolean ; private int[][] g = new int ; private TreeSet ts = new TreeSet(); private String result = ""; public CharSequence(){ for(int i=0; i for(int j=0; j if(i == j) g[i][j] = 0; else g[i][j] = 1; } } g[3][5] = 0; g[5][3] = 0; } public void depthFirst(int index){ visited[index] = true; result += c[index]; if(result.length() == n){ ts.add(result); resultresult = result.substring(0,result.length()-1); visited[index] = false; } else{ for(int i=0; i if(!visited[i] && g[index][i] == 1){ depthFirst(i); }else continue; } resultresult = result.substring(0,result.length()-1); visited[index] = false; } } public void graphicGet(){ for(int i=0; i depthFirst(i); } int count = 0; System.out.print("图论的结果:"); Iterator it = ts.iterator(); while(it.hasNext()){ String tmp = it.next(); if(tmp.contains("35")) continue; if(tmp.contains("53")) continue; if(tmp.charAt(3) == '4') continue; System.out.println(tmp); count++; } System.out.println("共计:"+count+"个"); } public void bruteForce(){ System.out.println("暴力搜的结果:"); int count = 0; for(int i = 122345; i<543222; i++){ String tmp = ""+i; if(tmp.charAt(3) == '4') continue; if(tmp.contains("35")) continue; if(tmp.contains("53")) continue; if(tmp.contains("5") && tmp.contains("4") && tmp.contains("3") && tmp.contains("1")) { int index = tmp.indexOf("2"); if(index == -1) continue; if(index == tmp.length()-1) continue; if(tmp.substring(index+1).contains("2")){ System.out.println(tmp); count++; } } } System.out.print("共计:"+count+"个"); } public void recrusive(){ } public static void main(String[] args) { CharSequence cs = new CharSequence(); //图论的方法 cs.graphicGet(); //暴力搜索 cs.bruteForce(); } } 转载自:http://developer.51cto.com/art/201104/256286.htm
通过例子,希望会对你有帮助。下面一篇将要介绍Java排序算法总结。
相关文章推荐
- 用JAVA编写一个算法实现对一个字符数组的所有元素的所有组合
- 还是字符组合问题,直接针对题目建模(java,算法探讨)
- 用改过的“数字进制转换”枚举字符组合,这是简化的版本。(java,算法研究)
- [算法学习]Java实现字符序列全组合
- 请用Java实现一个算法:由a-z、0-9组成3位的字符密码,并打印所有可能的密码组合。
- 计算字符的组合量并一一列举出来(java,算法探讨)
- 用JAVA实现排序算法之五:希尔排序
- 【每天算法3】:用java语言实现,二维Vector的排序组合
- 排列组合算法 的java实现
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- 找到所有排序组合算法
- 用JAVA实现排序算法之四:快速排序
- 高效率的排列组合算法(java实现)
- [小算法]从M个不同字符中任取N个字符的所有组合
- java一个算法题:输出一个字符串中出现次数最多的字符,以及次数
- java基础知识之 算法 【冒泡排序】【快速排序】
- C语言实现全排列(部分算法参考网友,可实现重复字符的组合)
- 使用排序化简组合生成算法
- Java字符统计并排序
- JAVA版位图排序(算法珠玑开篇的例子)