LeetCode.1304 和为零的N个唯一整数

710 阅读2分钟

「这是我参与2022首次更文挑战的第31天,活动详情查看:2022首次更文挑战」。

题目描述:

1304. 和为零的N个唯一整数 - 力扣(LeetCode) (leetcode-cn.com)

给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。

示例一

输入: n = 5
输出: [-7,-1,1,3,4]
解释: 这些数组也是正确的 [-5,-1,1,2,3][-3,-1,2,-2,4]

示例二

输入: n = 3
输出: [-1,0,1]

示例三

输入: n = 1
输出: [0]

提示:

  • 1 <= n <= 1000

思路分析

数学

和为0,我们最容易想到的就是正负相加即可。

所以我们只要不断的构造出以一对正负数的数组即可满足题目要求。

比如3,这是一个奇数,我们中间为0,左右各一位正负1,最后一位只剩一位就直接填充0即可满足要求。

[-1,1,0]

再比如4,这是一个偶数,我们直接左右正负对称即可。

比如[-1,1,-2,2]即可。

AC代码

class Solution {
    public int[] sumZero(int n) {
        int[] ans = new int[n];
        int index = 0;
        for (int i = 1; i <= n / 2; i++) {
            ans[index++] = -i;
            ans[index++] = i;
        }
        return ans;
    }
}

总结

虽然这是个简单题,但是上面这个解法还是蛮巧妙的,利用了默认值为0的情况,省去了一些其他答案中的判断奇偶数啊,甚至求出中间位置填0,左右对称再填数的复杂场景,代码通俗易懂。

参考

和为零的N个唯一整数 - 和为零的N个唯一整数 - 力扣(LeetCode) (leetcode-cn.com)

java 正负数以0为中心对称 - 和为零的N个唯一整数 - 力扣(LeetCode) (leetcode-cn.com)

从中间开始加相反数 - 和为零的N个唯一整数 - 力扣(LeetCode) (leetcode-cn.com)