按要求罗列所有字符串字符序列
生活随笔
收集整理的這篇文章主要介紹了
按要求罗列所有字符串字符序列
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
描述
針對1、2、2、3、4、5這6個(gè)數(shù)字,編寫一個(gè)函數(shù),打印出所有不同的排列,要求4不能排第三位,3和5不能相連。
?
分析
可以利用圖的深度遍歷。
3和5不能相連 - 意味圖中3和5不直連。?
4不能排第三位 - 這個(gè)可以在遍歷后做判斷。
注意:由于題中6個(gè)數(shù)有重復(fù),故遍歷時(shí)是有重復(fù)的序列的,故使用了set過濾了重復(fù)的元素。
?
代碼
import java.util.HashSet; import java.util.Iterator; import java.util.Set;public class Test {private int[] numbers = {1, 2, 2, 3, 4, 5};private int n = numbers.length;private boolean[] visited = new boolean[n];private int[][] graph = new int[n][n];private String combination = "";public Set<String> getAllCombinations() {buildGraph();Set<String> set=new HashSet<String>();for(int i=0;i<n;i++){this.depthFirstSearch(i,set); //每個(gè)節(jié)點(diǎn)都出發(fā)一遍 }return set;}/** 從start節(jié)點(diǎn)開始深度遍歷* */private void depthFirstSearch(int start,Set<String> set){visited[start]=true;combination=combination+numbers[start];if(combination.length()==n){if(combination.indexOf("4")!=2)set.add(combination);}else{for(int j=0;j<n;j++){if(graph[start][j]==1&&visited[j]==false)depthFirstSearch(j,set);}}combination=combination.substring(0,combination.length()-1); //[0,length()-1)visited[start]=false;}/** 建圖* */public void buildGraph() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i == j)graph[i][j] = 0;elsegraph[i][j] = 1;}}//確保3到5無連線graph[3][5] = 0;graph[5][3] = 0;}public static void main(String[] args) {Test test=new Test();Set<String> set=test.getAllCombinations();Iterator<String> iter=set.iterator();while(iter.hasNext()){System.out.println(iter.next());}} }?
轉(zhuǎn)載于:https://www.cnblogs.com/zadomn0920/p/6361455.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的按要求罗列所有字符串字符序列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: osm2pgsql windows “i
- 下一篇: Spring中的容器