持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情。
题目描述
给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。
来源:力扣(LeetCode)
- 示例1
输入: 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
思路分析
据题意可知,给你正整数n,返回任意一个有n个各不相同的整数组成的数组,然后要求这个数组所有元素的总和等于0;这里的要求很人性化,只要求总和等于0就好,不管数组是怎么组成的,你数组里面的正数的个数和负数的个数相等也好,不相等也好,只要等于0就可以;这样做起来就简单多了,有多种方式可以实现:
1、当给的整数是奇数时,数组的中间就给一个0,0的左边所有元素都给正整数,0的右边的所有元素都给负整数,两边的绝对值相等,给左边一个正整数时,就给右边一个负整数,绝对值相等,这样的话,整个数组所有元素的总和就是0;若给出的整数是偶数时,数组左边的一半就给正整数,同时右边的一半就给负整数,不需要0来作为中间元素,这样的总数也是0;
2、创建一个长度为n的数组,所有元素都填充0,遍历整个数组,给数组的每个数组赋值它的下标,同时将下标的总和计算出来,等遍历结束后,整个数组的所有都是正整数,最后将下标的总和换成负数再赋值给数组的最后一个元素,这样数组的总和也是0。
AC代码
function solution(n) {
let arr = new Array(n).fill(0);
let sum = 0;
for( let i=0; i<arr.length-1; i++) {
sum = sum + 1;
arr[i] = i;
}
arr[arr.length-1] = -sum;
}