字符串的全排列(Java)

给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。

输入格式:
一行,一个字符串,长度不大于8。

输出格式:
输出所有全排列,每行一种排列形式,字典序从小到大。

输入样例:
在这里给出一组输入。例如:

abc
输出样例:
在这里给出相应的输出。例如:

abc
acb
bac
bca
cab
cba

解析:

可以先将输入的字符串按照全排列先排一遍,将结果存入一个容器中,然后对容器中的所有字符串进行排序

代码如下

import java.io.BufferedInputStream;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(new BufferedInputStream(System.in));
		String s=in.next();
		char[] ar = s.toCharArray();
		List<String> a= new LinkedList<String>();
		a=Permutation(ar, 0);
		Collections.sort(a);//对链表里的字符串进行排序,保证是字典序
		for(String t : a) {
			System.out.println(new String(t));
		}
	}
	
	  private static List<String> Permutation(char[] cs, int current) {
	    //结果
	    List<String> result = new LinkedList<>();
	    //当移动到最后一位时,把它转化为字符串存储在链表里
	    if (current == cs.length - 1) {
	      result.add(new String(cs));
	    } else {
	     
	      for (int i = current; i < cs.length; i++) { //遍历字符串,使得每一个字符都能到第一个位置
	       
	        swap(cs, current, i); //交换当前字符与下一字符
	        
	        result.addAll(Permutation(cs, current + 1));//递归调用,第一个位置确定了,接下来就确定第二个位置,然后第三个...直到最后一位
	       
	        swap(cs, current, i);//由于之前交换过一次,为了不重复,再交换过来
	      }
	    }
	    return result;
	  }

	  private static void swap(char[] cs, int b, int e) {
	    char tmp = cs[b];
	    cs[b] = cs[e];
	    cs[e] = tmp;
	  }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值