[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+n−1=3 来计算
第 1,3 层互为镜像,单个的面积为 n + n − 1 − 2 = 1 n + n - 1 - 2 = 1 n+n−1−2=1
-
当
n = 3
时,图有 5 层第 3 层的面积可以用 n + n − 1 = 5 n + n - 1 = 5 n+n−1=5 来计算
第 2,4 层互为镜像,单个的面积为 n + n − 1 − 2 = 3 n + n - 1 - 2 = 3 n+n−1−2=3
第 1,5 层互为镜像,单个的面积为 n + n − 1 − 2 − 2 = 1 n + n - 1 - 2 - 2 = 1 n+n−1−2−2=1
-
当
n = 4
时,图有 7 层遵循同样的规律
也就是说可以将 最中间的那一层,也就是第 n
层, 抽出来作为面积的
b
a
s
e
base
base;随后每减少一层,该层的面积都可以使用
b
a
s
e
=
b
a
s
e
−
2
base = base - 2
base=base−2 这样的方法去进行迭代。
使用 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?)