美文网首页
41、全排列变种之正方体

41、全排列变种之正方体

作者: GIndoc | 来源:发表于2019-10-30 18:26 被阅读0次

题目:输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放在正方体的8个顶点上,使得正方体上三组相对的面上的4个顶点的和都相等。

解法:和全排列思路一样,只是最后多加一个判断条件:先确定第一个数字,然后对后面的数字做全排列。当所有数字都确定下来后,判断当前数组是否满足条件正方体上三组相对的面上的4个顶点的和都相等,即
(nums[0] + nums[1] + nums[2] + nums[3] == nums[5] + nums[6] + nums[7] + nums[4]) && (nums[0] + nums[2] + nums[4] + nums[6] == nums[5] + nums[1] + nums[7] + nums[3]) && (nums[0] + nums[1] + nums[4] + nums[5] == nums[2] + nums[6] + nums[7] + nums[3])

    private List<List<Integer>> Permutation(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        if (nums == null || nums.length != 8) return result;
        permutation(result, nums, 0);
        return result;
    }

    private void permutation(List<List<Integer>> result, int[] nums, int index) {
        if (index >= nums.length) {
            if ((nums[0] + nums[1] + nums[2] + nums[3] == nums[5] + nums[6] + nums[7] + nums[4]) &&
                    (nums[0] + nums[2] + nums[4] + nums[6] == nums[5] + nums[1] + nums[7] + nums[3]) &&
                    (nums[0] + nums[1] + nums[4] + nums[5] == nums[2] + nums[6] + nums[7] + nums[3])) {
                List<Integer> numbers = new ArrayList<>();
                for (int num : nums) {
                    numbers.add(num);
                }
                result.add(numbers);
            }
        } else {
            for (int i = index; i < nums.length; ++i) {
                if (i == index || nums[i] != nums[index]) {
                    int temp = nums[i];
                    nums[i] = nums[index];
                    nums[index] = temp;

                    permutation(result, nums, index + 1);

                    temp = nums[i];
                    nums[i] = nums[index];
                    nums[index] = temp;
                }
            }
        }
    }

相关文章

  • 41、全排列变种之正方体

    题目:输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放在正方体的8个顶点上,使得正方体上三组相对的面上...

  • 42、全排列变种之八皇后

    题目:在8x8对国际象棋上摆放8个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列、同一对角线上。如图...

  • 基础之全排列

    很基本的算法,使用DFS实现

  • 递归之全排列

    一般把1~n这n个整数按某个顺序摆放的结果称为这n个整数的一个排列,全排列是指这n个整数能形成的所有排列。不妨设定...

  • Permutations

    求一个数组的全排列。 遇到的问题: 1.忘记了字典序排列的定义;2.思考时间过长;3.没有及时找到全排列和字典序之...

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 全排列

    求全排列最简单的就是递归了123 的全排列共有 6 个, 123 的全排列等于以 1 开头 23 的全排列, 加上...

  • 全排列

    题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排...

  • 全排列

    递归的版本image.png

  • 全排列

网友评论

      本文标题:41、全排列变种之正方体

      本文链接:https://www.haomeiwen.com/subject/yolavctx.html