标签:条件 new 代码 length 去重 ++ toc inpu keyword
题目:终端随机输入一串字符串,输出该字符串的所有排列。
例如,输入:“abc”,输出:abc、acb、bac、bca、cab、cba
递归解决:
关键在于递归条件、边界条件(start==end)、去重(例如"aa",可以借助HashSet进行去重)
关键词:permutation [p??mj?‘te??(?)n] 排列,置换 recursion [r?‘k???(?)n] 递归,循环
具体代码参看如下:
1 import java.util.ArrayList; 2 import java.util.HashSet; 3 import java.util.Scanner; 4 5 public class RecursionPermutation { 6 public static ArrayList<String> result = new ArrayList<String>(); 7 public static HashSet<String> set = new HashSet<String>(); 8 /** 9 * 主函数入口 10 * @param args 11 */ 12 public static void main(String[] args) { 13 System.out.println("请随意输入一串字符串:"); 14 String inputString = new Scanner(System.in).next().toString(); 15 ArrayList<String> result = Permutation(inputString); 16 for (int i = 0; i < result.size(); i++) { 17 System.out.println(result.get(i)); 18 } 19 } 20 21 /** 22 * 递归函数主入口 23 * @param str 24 * @return 25 */ 26 public static ArrayList<String> Permutation(String str) { 27 if (str == null || str.length() == 0) 28 return result; 29 else 30 Permutation(str, 0, str.length() - 1); 31 result.addAll(set); 32 return result; 33 } 34 35 /** 36 * 递归条件函数 37 * @param str 38 * @param start 39 * @param end 40 */ 41 public static void Permutation(String str, int start, int end) { 42 char[] array = str.toCharArray(); 43 String r = null; 44 if (start == end) { 45 r = String.valueOf(array); 46 set.add(r); 47 } else { 48 for (int i = start; i <= end; i++) { 49 char tmp = array[start]; 50 array[start] = array[i]; 51 array[i] = tmp; 52 53 Permutation(String.valueOf(array), start + 1, array.length - 1); 54 55 tmp = array[start]; 56 array[start] = array[i]; 57 array[i] = tmp; 58 } 59 } 60 } 61
以上代码都在本机测试验证通过,绝对保证无误!!!
标签:条件 new 代码 length 去重 ++ toc inpu keyword
原文地址:http://www.cnblogs.com/liang1101/p/6376210.html