算法基础_递归_全排列问题
问题:给定一个字符串,如“ABCDE”,然后对其进行全排列,将结果全部输出,使用递归
/** * 使用递归完成一个字符串的全排列 * @author Administrator * */ public class Demo02 { static int count = 0; public static void f(char[] ini,int k/*从第几个位置开始选*/) { //count++; if(k == ini.length) { for(char temp:ini) { System.out.print(temp); } System.out.println(); } for(int i = k;i<ini.length;i++) { {char m = ini[k];ini[k] = ini[i];ini[i] = m;}//转换 f(ini,k+1); {char m = ini[k];ini[k] = ini[i];ini[i] = m;}//回溯 } } public static void main(String[] args) { char[] s = "ABC".toCharArray(); f(s,0); // System.out.println(count); } }
解题思路如下:
就是使用递归和循环嵌套,然后在字符串上的每一个位置进行五次变动,当然,如此设计的巧妙之处就在于每次都是在前面不变的情况下,一位一位的选中,比较切合全排列的思想(好吧我语文不好,不知道怎么表达……)
和五层循环嵌套的思想差不多,不过在代码上看起来比较简洁(相应的……理解上千差万别)
简单来说,就是,不用想那么多,就是每次吧第一位选中,然后再进行下一位的遍历
希望对大家有所帮助
以上