zoukankan      html  css  js  c++  java
  • 数学基础:一、排列算法(递归)

    排列采用递归的方式进行,算法如下:

    public class Lesson7_2 {
        /**
         * @param rest-目前未排列的数据,has-保存已经排列的数据及其顺序
         * @return void
         * @Description: 使用函数的递归(嵌套)调用,找出所有可能的排列顺序
         */
        public static void permutate(List<String> has, List<String> rest, List<List<String>> result) {
            // 未(待)排列的数据为空,说明已排列完,直接在result中保存结果
            if (rest.size() == 0) {
                result.add(has);
            } else {
                for (int i = 0; i < rest.size(); i++) {
                    // 为了不破坏递归前的原数据,设置临时变量tmpHas和tmpRest来保存中间值
                    List<String> tmpHas = new ArrayList<>(has);
                    tmpHas.add(rest.get(i));
                    // 将已准备排序的数据从未排序列表中移出
                    List<String> tmpRest = new ArrayList<>(rest);
                    tmpRest.remove(i);
                    // 递归调用,对于剩余的数据时行排列
                    permutate(tmpHas, tmpRest, result);
                }
            }
        }
    
        public static void main(String[] args) {
            ArrayList<String> restList = new ArrayList<String>(Arrays.asList("1", "2", "3"));
            List<List<String>> resultList = new ArrayList<>();
            Lesson7_2.permutate(new ArrayList<String>(), restList, resultList);
            System.out.println(resultList);
        }
    
    }
    
  • 相关阅读:
    noip2007 tg day1t1 统计数字
    洛谷1123 取数游戏
    洛谷1123 取数游戏
    素数筛
    bzoj 1297 [SCOI2009]迷路
    bzoj 2115 [Wc2011] Xor——路径和环的转化
    poj 2154 Color——带优化的置换
    bzoj 1407 [Noi2002]Savage
    poj 1286 Necklace of Beads
    bzoj 4031 [HEOI2015]小Z的房间
  • 原文地址:https://www.cnblogs.com/dulinan/p/12033000.html
Copyright © 2011-2022 走看看