在 JavaScript 中确定数字是否形成加法序列

javascriptweb developmentfront end technologyobject oriented programming

此问题用于确定数组中给定的数字是否为加法序列的形式。我们将检查,如果序列中任何两个相邻的数字相加等于序列中的下一个数字,我们可以使用简单的程序来确认这一点。

理解问题

要理解上述问题,我们首先需要深入了解该问题。如果将问题分解为子问题,则很容易解决。考虑解决问题必须遵循的任何重要程序或阶段。

因此,首先我们需要确定什么是加法数字或序列?加法序列必须有三个或更多数字。除前两个数字外,系列中的每个连续数字都必须等于它之前的两个数字之和。

Num = 112358

因为 2 = 1+1、3 = 1 + 2、5 = 2 + 3 和 8 = 3 + 5 ------> 112358

结果为真

为了解决这个问题,在 JavaScript 中,数字序列形成一个复合序列。我们可以使用一个简单的算法来检查序列中任意两个相邻数字的总和是否等于序列中的下一个数字。为了测试这个问题,我们将使用 existAdditiveSequence() 函数,您可以使用不同的输入数组调用它并检查输出。

算法

步骤 1 − 声明一个函数并给它命名为"existAdditiveSequence()",它接受一个整数元素数组作为参数。如果数字将形成一个加法序列,它将返回 true,否则返回 false。

步骤 2 − 现在向前,从第二个索引(即序列中的第三个数字)开始,第一步将循环遍历序列中的所有数字。

步骤 3 − 在第二步之后,我们将验证序列中每个数字的前几个连续数字的总和是否与当前数字相同。 之后,如果不相等,函数将返回 false。 因此,它将表明没有数字的加法序列。 如果循环结束时没有发现任何不一致之处,函数将返回 true,表示整数确实形成了一个加法序列。

步骤 4 − 第三步之后,如果不满足上述条件,则结果将为 false。

示例 

//创建一个具有名称和参数的函数
function existAdditiveSequence(n) {
    for (let i = 2; i < n.length; i++) {
      if (n[i] !== n[i-1] + n[i-2]) {
        return false;
      }
    }
    return true;
  }

// 定义数组序列
const arr1 = [1, 1, 2, 3, 5, 8];
const arr2 = [1, 3, 4, 7, 11, 18];
const arr3 = [1, 2, 4, 7, 11, 18];
const arr4 = [1, 1, 2, 5, 7, 12];

// 显示结果
console.log(existAdditiveSequence(arr1), "---> 一个加法序列")
console.log(existAdditiveSequence(arr2), "---> 一个加法序列");
console.log(existAdditiveSequence(arr3), "---> 不是一个加法序列");
console.log(existAdditiveSequence(arr4), "---> 不是一个加法序列");

输出

true ---> 一个加法序列
true ---> 一个加法序列
false ---> 不是一个加法序列
false ---> 不是一个加法序列

数组 [1, 1, 2, 3, 5, 8] 和数组 [1, 3, 4, 7, 11, 18] 创建了加法斐波那契数列。因此,结果为真。

数组 [1, 2, 4, 7, 11, 18] 不会创建加法序列,因为前两个数字的总和 3 不等于第三个数字 4,而这应该是相等的。结果输出结果为 false。

数组 [1, 1, 2, 5, 7, 12],它不构成加法序列,因为第 2 个和第 3 个数字相加等于 3,与第 4 个数字 5 不同。因此,结果输出结果为 false。

时间和空间复杂度

existAdditiveSequence() 函数具有 O(n) 时间复杂度,其中 n 是输入数组的长度。这是因为函数对输入数组进行一次迭代,并确定每个数字是否是其前两个数字的总和。

该函数具有恒定的额外内存需求,以保存循环索引以及当前、前一个和前一个-前一个值,因此其空间复杂度为 O(1)。

结论

existAdditiveSequence() 方法是确定一组数字是否为加法序列的有用工具。


相关文章