「这是我参与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)