黑马程序员--舍友笔试中的一道算法题

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

我的舍友晓杰(C++高手)今天去了一家IT公司笔面试,其中就有这么一道题。


题目大意:输入一个字符串,显示出字符串的所有排列。例如:输入"abc",就得输出"abc"、"acb"、"bac"、"bca"、"cab"、"cba" 所有可能的序列。

颇有意义的一道题,我决定用Java语言来写一写。代码如下:

import  java.util.Arrays;
public   class  CharList {

    
// 遍历所有可能的排列结果
     public   static   void  traversal( char [] chss,  int  index){
        
// for循环,从index位置开始向前(向右), index位置的数与i位置的数互换
         for ( int  i  =  index; i  <  chss.length; i  ++ ) {
            
char [] chs  =  Arrays.copyOf(chss, chss.length);     // Copy出新数组(为了修改其值时互不影响)
             char  temp  =  chs[index];
            chs[index] 
=  chs[i];
            chs[i] 
=  temp;
            
if (index  ==  chs.length - 1 ) {     // 到了字符串末, 输出结果
                System.out.println( new  String(chs));
                
break ;     // 跟出此次循环, 此traversal方法执行完毕,跳回上一级循环(在上一个方法体中)
            }
            traversal(chs, index
+ 1 );         // 递归
        }
    }

    
// Test
     public   static   void  main(String[] args) {
        String str 
=   " abcd " ;
        
char [] chs  =  str.toCharArray();     // 转成字符数组
        traversal(chs,  0 );
    }

}

程序执行,输出结果为:
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值