[JavaScript 刷题] Code Signal - 形状面积(shapeArea)

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] Code Signal - 形状面积(shapeArea)相关的知识,希望对你有一定的参考价值。

[javascript 刷题] Code Signal - 形状面积(shapeArea)

题目地址:shapeArea

题目

如下:

Below we will define an n-interesting polygon. Your task is to find the area of a polygon for a given n.

A 1-interesting polygon is just a square with a side of length 1. An n-interesting polygon is obtained by taking the n - 1-interesting polygon and appending 1-interesting polygons to its rim, side by side. You can see the 1-, 2-, 3- and 4-interesting polygons in the picture below.

Example:

  • For n = 2, the output should be

    shapeArea(n) = 5;

  • For n = 3, the output should be

    shapeArea(n) = 13.

Input/Output:

  • [execution time limit] 4 seconds (js)

  • [input] integer n

    Guaranteed constraints:

    1 ≤ n < 104.

  • [output] integer

    The area of the n-interesting polygon.

解题思路

刚开始想过对角线相乘的方法,后来发现对角线相乘实现起来有点儿困难……

后来发现这个层级关系是这样的:

  • n = 1 时,图有 1 层

  • n = 2 时,图有 3 层

    第 2 层的面积可以使用 n + n − 1 = 3 n + n - 1 = 3 n+n1=3 来计算

    第 1,3 层互为镜像,单个的面积为 n + n − 1 − 2 = 1 n + n - 1 - 2 = 1 n+n12=1

  • n = 3 时,图有 5 层

    第 3 层的面积可以用 n + n − 1 = 5 n + n - 1 = 5 n+n1=5 来计算

    第 2,4 层互为镜像,单个的面积为 n + n − 1 − 2 = 3 n + n - 1 - 2 = 3 n+n12=3

    第 1,5 层互为镜像,单个的面积为 n + n − 1 − 2 − 2 = 1 n + n - 1 - 2 - 2 = 1 n+n122=1

  • n = 4 时,图有 7 层

    遵循同样的规律

也就是说可以将 最中间的那一层,也就是第 n 层, 抽出来作为面积的 b a s e base base;随后每减少一层,该层的面积都可以使用 b a s e = b a s e − 2 base = base - 2 base=base2 这样的方法去进行迭代。

使用 JavaScript 解题

function shapeArea(n) {
  // 即 base
  let square = n + n - 1;
  // base = base - 2,毕竟从 n - 1 开始迭代
  let top = square - 2;
  for (let i = n - 1; i > 0; i--) {
    square += top * 2;
    top -= 2;
  }
  return square;
}

以上是关于[JavaScript 刷题] Code Signal - 形状面积(shapeArea)的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] Code Signal - 形状面积(shapeArea)

[JavaScript 刷题] Code Signal - 幸运数(is lucky)

[JavaScript 刷题] Code Signal - 翻转括号内字符(reverseInParentheses)

[JavaScript 刷题] Code Signal - 相似数组(Are Similar?)

[JavaScript 刷题] Code Signal - 共用字符数(commonCharacterCount)

[JavaScript 刷题] Code Signal - 矩阵元素之和(matrixElementsSum)