舍友笔试中的一道算法题(我的解法)

舍友笔试中的一道算法题(我的解法)
我的舍友晓杰(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


本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
    

你可能感兴趣的:(舍友笔试中的一道算法题(我的解法))