题目描述
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。
输入描述:
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
输出描述:
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义: 已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得 s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。 每组样例输出结束后要再输出一个回车。
链接:https://www.nowcoder.com/questionTerminal/5632c23d0d654aecbc9315d1720421c1 来源:牛客网 import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { String string = scanner.nextLine(); Set<String> set = getSortedSet(string.toCharArray(),0); Iterator<String> iterator = set.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } System.out.println(); } } private static Set<String> getSortedSet(char[] cs,int start){ Set<String> set = new TreeSet<>(); if(start == cs.length-1) { set.add(String.valueOf(cs)); return set; } for (int j = start; j < cs.length; j++) { swap(cs, start, j); set.addAll(getSortedSet(cs, start+1)); swap(cs, start, j); } return set; } private static void swap(char[] cs,int i,int j) { char t = cs[i]; cs[i] = cs[j]; cs[j] = t; } }