《剑指offer》Java实现--打印字符链表的所有全排列

题目描述

    输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

解题思路

    把字符串分为两部分,一部分是字符串的第一个字符,另一部分是剩下的所有字符,接下来求剩余所有字符串的排列;拿第一个字符与后面字符组个交换。

Java代码实现

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 给定一个字符链表,打印其所有可能的排列(注意不是组合)
 * @author Administrator
 *
 */
public class Exe40_GetAllRankedDatas {

    public static void main(String[] args) {
        
        List<Character> ls=new ArrayList<Character>();
        ls.add('A');
        ls.add('B');
        ls.add('C');
        solution(ls, 0);

    }
    
    public static void solution(List<Character> ls,int n) {
        if(ls==null||ls.size()==0) return;
        else {
            if(n==ls.size()){
                System.out.println(ls.toString());
            }else {
                for(int i=n;i<ls.size();i++){
                    Collections.swap(ls, i, n);
                    solution(ls, n+1);
                    Collections.swap(ls, i, n);
                }
            }
        }
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容