Java全排列笔记

    /*
        题目描述:输入一个字符串,打印出该字符串的所有排列。例如,输入字符串”abc”,则输出有字符’a’,’b’,’c’所能排列出来的所有字符串”abc”,”acb”,”bac”,”bca”,”cab”,”cba”。
        
        思路解析:递归法
        * 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。
        * 以对字符串abc进行全排列为例,我们可以这么做:
            1)固定a,求后面bc的排列:abc,acb;
            2)固定b,求后面ac的排列:bac,bca;
            3)固定c,求后面ba的排列:cba,cab;
        
            即递归树:
             str:    a       b	       c
                    ab ac	  	ba bc	    ca cb
              result:	 abc acb	bac bca       cab cba
        
        参考链接:https://www.cnblogs.com/lifegoesonitself/p/3225803.html
    */
    
    public class Main{
        public static void main(String[] args){
            String s="abc";
            String result="";
            
            search(s,result,s.length());
        }
        public static void search(String s,String result,int len){   
            if(result.length()==len){   //表示遍历完了一个全排列结果
                System.out.println(result);
            }
            else{
                for(int i=0;i<len;i++){
                    if(result.indexOf(s.charAt(i))<0){     //返回指定字符在此字符串中第一次出现处的索引。
                        search(s,result+s.charAt(i),len);
                    }
                }
            }
        }
    }

参考链接:https://www.cnblogs.com/lifegoesonitself/p/3225803.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值