public static void main(String[] args) { new Test2().test(); } private void test() { char[] chars = {'a', 'b', 'c'}; lenth = chars.length; rank(chars); for (String s : result) { System.out.println(s); } } public List<String> result = new ArrayList<>(); StringBuilder builder = new StringBuilder(); int lenth = 0; /** * 循坏当前数组,让其中的所有元素依次成为首部 * @param chars */ public void rank(char[] chars) { for (int i = 0; i < chars.length; i++) { if (i > 0) { char temp = chars[0]; chars[0] = chars[i]; chars[i] = temp; } rank2(chars); } } /** * 递归对当前数组除首部后继续拆解数组,知道数组为空 * 递归出栈,返回需要弹出压入栈中的元素 * @param chars */ public void rank2(char[] chars) { if (chars.length == 0) { return; } builder.append(chars[0]); rank(Arrays.copyOfRange(chars, 1, chars.length)); if (builder.length() == lenth) result.add(new String(builder.toString())); builder.delete(builder.length() - 1, builder.length()); }
算法-字符全排列
最新推荐文章于 2023-01-04 00:25:17 发布