和为零的N个唯一整数

149 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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;
}