41、全排列变种之正方体

题目:输入一个含有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;
                }
            }
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 2,820评论 0 5
  • 首先考虑一道奥数题目: □□□ + □□□ = □□□,要将数字1~9分别填入9个□中,使得等式成立。例如173+...
    SHY圆圆圈圈圆圆阅读 3,588评论 4 7
  • 基本数据结构中,数组是很重要的,这篇小猿圈加加对数组详解一席,具体使用,在学习过程中有困惑的朋友,可以看一下加加的...
    小猿圈加加阅读 500评论 0 0
  • 1. 图的定义和基本术语 线性结构中,元素仅有线性关系,每个元素只有一个直接前驱和直接后继;树形结构中,数据元素(...
    yinxmm阅读 5,625评论 0 3
  • 陶醉于一种游戏,摘取一朵复叶 细数它叶片的偶与奇,偶是离别 奇是继续爱你,可总是奇,总是奇 仿佛是我耍了伎俩之后,...
    青灯先生阅读 327评论 4 8

友情链接更多精彩内容