首页 > 学院 > 开发设计 > 正文

递归求组合

2019-11-08 03:17:12
字体:
来源:转载
供稿:网友
package com.example.utils;import java.util.ArrayList;import java.util.List;public class ArrayHelper {	PRivate static int count = 0;	public static void main(String[] args) {		List<String> list = new ArrayList<>();		permutation(new char[] { 'A', 'B', 'C' }, 0, list);		System.out.println(list);		System.out.println(count + "次");	}	/**	 * 	 * 改进的版本,将最后的结果放入到list中	 * 	 * 结果加入count的测试 源代码的 continue部分根本没有执行到	 * 	 * @param arr	 * @param index	 * @param list	 */	private static void permutation(char[] arr, int index, List<String> list) {		int size = arr.length;		if (index == size) {			StringBuffer sb = null;			for (int i = 0; i < arr.length; i++) {				sb = sb == null ? new StringBuffer() : sb;				sb.append(arr[i]);			}			list.add(sb.toString());			sb = null;		} else {			for (int i = index; i < size; i++) {				count++;  				swap(arr, i, index);				permutation(arr, index + 1, list);				swap(arr, i, index);			}		}	}	static void swap(char[] arr, int idx1, int idx2) {		char temp = arr[idx1];		arr[idx1] = arr[idx2];		arr[idx2] = temp;	}	static void permutation(char[] arr, int index, int size) {		if (index == size) {			for (int i = 0; i < arr.length; i++) {				System.out.print(arr[i] + " ");			}			System.out.println();		} else {			for (int i = index; i < size; i++) {				if (i != index && arr[i] == arr[index]) {					continue;				}				swap(arr, i, index);				permutation(arr, index + 1, size);				swap(arr, i, index);			}		}	}}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表