字符串的排列-by Java

原创 2016年08月29日 22:45:52

题目

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

解析(递归):

方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的。然后可以将123的第二个数和每三个数交换得到132。同理可以根据213和321来得231和312。因此可以知道——全排列就是从第一个数字起每个数分别与它后面的数字交换。找到这个规律后,递归的代码就很容易写出来了:

/**
 * 
 */
package com.Permutation;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

/**
 * @author Home
 *
 */
public class Solution {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.next();
            ArrayList<String> al = new Solution().Permutation(str);
            for(String s:al)
                System.out.println(s);
        }
        sc.close();

    }
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> al = new ArrayList<String>();
        char[] ch = str.toCharArray();
        if(ch!=null&&ch.length>0){
            PermutationHelper(ch,0,al);
        }
        Collections.sort(al);
        return al;

    }

    private void PermutationHelper(char[] ch, int i, ArrayList<String> al) {
        if(i==ch.length-1){
            al.add(String.valueOf(ch));
        }
        for(int j=i;j<ch.length;j++)
        {
            if(j!=i&&ch[j]==ch[i]) continue;
            char temp = ch[i];
            ch[i] = ch[j];
            ch[j] = temp;
            PermutationHelper(ch,i+1,al);
            temp = ch[i];
            ch[i] = ch[j];
            ch[j] = temp;
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

字符串全排列算法理解与java实现

字符串全排列算法问题描述:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba 解题思路...
  • jbfsdzpp
  • jbfsdzpp
  • 2015年08月13日 19:51
  • 1075

字符串全排列与全组合的递归实现-Java版

排列组合算法用途广泛, 需要掌握, 为降低门槛, 本文主要关注算法的逻辑和简易性, 未重视算法效率. 结合网络书本上的实现和自己的需求, 这里列有四个目标: 1. 所有元素的全排列: ab的全排列是...
  • kslinabc
  • kslinabc
  • 2015年05月10日 22:42
  • 6050

java字符串全排列的实现方式

今天突然之间想起了自己来易查面试时的一个笔试题目,题目大致如下:求字符串s的全排列。     其实这个题目的实现方式也就是递归调用,当时也就写了一下伪代码,今天就把完整的实现方式和大家分享下。    ...
  • xiaojimanman
  • xiaojimanman
  • 2013年12月26日 16:26
  • 2184

字符串的全排列(java)

差不多半个月没写博客了,今天再写一篇。        字符串全排列相信大家都不陌生,对于我来说真的是写了又忘,忘了又写,所以决定写成一篇博客,废话不多说下面我来分析问题: 问题描述:给定一个字符串...
  • sxiaobei
  • sxiaobei
  • 2015年08月09日 15:25
  • 1441

剑指offer:字符串的排列(java)

题目:输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则打印由字符a,b,c所能排列出来的所有字符串:abc,abc,bac,bca,cab,cba   我们求整个字符串的...
  • abc7845129630
  • abc7845129630
  • 2016年10月03日 22:39
  • 498

剑指Offer面试题28字符串的排列组合(递归和栈)

面试题28:字符串的全排列(递归) 输入一个字符串,打印出字符串中字符的所有排列,例如输入abc,输出abc,acb,bac,bca,cab,cba。 思路:把一个字符串看成两个部分,第一部分是它...
  • login_sonata
  • login_sonata
  • 2017年04月30日 10:56
  • 499

归纳法-生成全排列算法Java实现

数学领域的全排列问题,  从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。《算法设计与技巧分析》这本书...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2016年02月19日 14:11
  • 1655

剑指offer面试题28:字符串的排列 Java实现

题目: 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba. 算法分析: 我们求...
  • gg543012991
  • gg543012991
  • 2016年09月14日 19:42
  • 596

java 输入一个字符串,打印出该字符串中字符的所有排列

public class JavaDemo {public static void main(String[] args) { String str = ""; Scanner scan...
  • lovoo
  • lovoo
  • 2016年07月26日 23:10
  • 1999

剑指offer----字符串的全排列----java实现

字符串的全排列 采用递归的思想: 把需要全排列的字符串分为两部分看待: (1)字符串的第一个字符; (2)第一个字符后面的所有字符; 求所有可能出现在第一个位置的字符;将第一个字符和后面的字符一次交换...
  • snow_7
  • snow_7
  • 2016年09月07日 14:33
  • 1047
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串的排列-by Java
举报原因:
原因补充:

(最多只允许输入30个字)