打印一个字符串的所有排列?

z...zz..... 2010-12-17 07:33:43
打印一个字符串的所有排列?
...全文
238 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lost_guy_in_scut 2010-12-18
  • 打赏
  • 举报
回复

String input = "abc"; //求a/b/c三个字符的全排列
Set<String> results = new LinkedHashSet<String>();
results.add("");
for (int i=0; i<input.length(); i++)
for (int j=0; j<input.length(); j++){
String current = input.substring(j, j+1);
Set<String> newones = new LinkedHashSet<String>();
for(String s : results){
if (s.indexOf(current)==-1) s+=current;
newones.add(s);
}
results.addAll(newones);
}
for (String s: results)
if (s.length()==input.length())System.out.println(s);




膜拜!
magong 2010-12-17
  • 打赏
  • 举报
回复
俺也来贴一个

String input = "abc"; //求a/b/c三个字符的全排列
Set<String> results = new LinkedHashSet<String>();
results.add("");
for (int i=0; i<input.length(); i++)
for (int j=0; j<input.length(); j++){
String current = input.substring(j, j+1);
Set<String> newones = new LinkedHashSet<String>();
for(String s : results){
if (s.indexOf(current)==-1) s+=current;
newones.add(s);
}
results.addAll(newones);
}
for (String s: results)
if (s.length()==input.length())System.out.println(s);

短一些,呵呵
fengke01242010 2010-12-17
  • 打赏
  • 举报
回复

import java.util.Iterator;
import java.util.TreeSet;

public class Sort {

private String[] b = new String[] {"1","2","2","3","4","6"};

private int n = b.length;

private boolean[] visited = new boolean[n];

private int[][] a = new int[n][n];

private String result = "";

private TreeSet<String> set = new TreeSet<String>();

public static void main(String[] args) {
new Sort().start();
}

private void start() {

// Initial the map a[][]

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
a[i][j] = 0;
} else {
a[i][j] = 1;
}
}
}

// 3 and 5 can not be the neighbor.

a[3][5] = 0;
a[5][3] = 0;

// Begin to depth search.

for (int i = 0; i < n; i++) {
this.depthFirstSearch(i);
}

// Print result treeset.

Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
System.out.println(string);
}
}

private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];
if (result.length() == n) {
// "4" can not be the third position.

if (result.indexOf(" 4 ") != 2) {
// Filt the duplicate value.

set.add(result);
}
}
for (int j = 0; j < n; j++) {
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
}
}

// restore the result value and visited value after listing a node.

result = result.substring(0, result.length() - 1);
visited[startIndex] = false;
}
}

62,617

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧