Java字符組合排序,不是特別難的題目,暴力算和用圖論算(深度遍歷)都可以,結果是198.圖論的話就是構造無向圖,然後深度優先遞歸。
題目:用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[n];
- private int[][] g = new int[n][n];
- 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();
- }
- }
通過例子,希望會對你有幫助。下面一篇將要介紹Java排序算法總結。