码迷,mamicode.com
首页 > 其他好文 > 详细

输出字符串的所有排列

时间:2017-02-07 23:29:16      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:条件   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!