字符串的全排列JAVA实现

复制代码
package com.kpp;

/**
 * 求字符串的全排列
 * 递归的思想
 * 比如  abcde  先求出abcd的全排列,然后将e分别插入全排列的5个位置
 * a 全排列  a
 * ab 全排列  ab ba
 * abd 全排列即是  cab acb abc cba bca bac
 * 
 * @author kpp
 *
 */
public class QuanPaiLie {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "abcde";
        
        //System.out.println(str.substring(0, 2));
        String[] rs = getQuanPaiLie(str);
        if(rs != null){
            int count = 0;
            for(int i = 0;i < rs.length;i++){
                if(rs[i]!=null){
                    System.out.println(rs[i]);
                    count++;
                }
                
            }
            System.out.println("count: "+count);
        }
        
    }
    /**
     * 求一个字符串的全排列
     * @param str
     * @return
     */
    public static String[] getQuanPaiLie(String str){
        String[] rs = new String[1000];
        
        if(str == null||str.isEmpty()){
            return null;
        }
        int strLen = str.length();
        if(strLen == 1){
            rs[0] = str;
            
        }else if(strLen == 2){
            rs[0] = str;
            rs[1] = ""+str.charAt(1)+str.charAt(0);
            
        }else if(strLen > 2){
            char c = str.charAt(strLen-1);
            String strBefore = str.substring(0,strLen-1);
            String[] tmpRsArr = getQuanPaiLie(strBefore);
            int count = 0;
            for(int i = 0;i < tmpRsArr.length;i++){
                
                String tmpRs = tmpRsArr[i];
                if(tmpRs != null){
                    for(int k = 0;k < tmpRs.length()+1;k++){
                        rs[count++] = tmpRs.substring(0,k)+c+tmpRs.substring(k,tmpRs.length());
                    }
                }
                
                
                
            }
            
        }
        
        return rs;
    }

}
复制代码

 

posted @   kpp  阅读(2292)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
· 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!
点击右上角即可分享
微信分享提示