求字符串全排列的递归算法(java程序)

import java.util.ArrayList; import java.util.List; /** * 求字符串的全排列 * * @author wenin819 * */ public class Arrange { /** * 判断调用求排列的主要方法 */ public static List<String> arrange(String input){ if(null == input || 0 == input.length()){ System.out.println("输入为空!结果也为空!"); return null; } List<String> rsList= new ArrayList<String>(); arrangeItem(new StringBuffer(input), input.length() - 1, rsList); return rsList; } /** * 求排列的主要方法 */ public static void arrangeItem(StringBuffer input, int end, List<String> rsList) { if (0 == end) { rsList.add(new String(input)); return; } for (int i = 0; i <= end; i++) { swap(input, i, end); arrangeItem(input, end - 1, rsList); swap(input, i, end); } } /** * 置换StringBuffer字符串中i和j位置上的字符 */ private static void swap(StringBuffer word, int i, int j) { if (i == j) return; char temp; temp = word.charAt(i); word.setCharAt(i, word.charAt(j)); word.setCharAt(j, temp); } /** * 测试 */ public static void main(String args[]) { String input = new String("abcd"); if(args.length > 0) input = args[0]; List<String> rsList = arrange(input); System.out.println(input+"的排列总数为:" + rsList.size() + "/n排列分别为:"); for (int i = 0; i < rsList.size(); i++) { System.out.println(rsList.get(i)); } } }

上一篇:latex模板


下一篇:crmeb商城二次开发客服通讯功能,增加已读、撤回消息功能