因为已经有了编程示例,所以我将解释为什么公式是n * n + (n-1) * (n-1)
我找到了没有递归的公式。测试通过了。
def shapeArea(n):
if n>=10**4 or n<1:
return False
return (n**2+(n-1)**2)
我认为你写的“for”循环部分有问题。如果您已经在使用递归,为什么还需要“for”循环?不过,我没有使用递归就这样做了:
def shapeArea(n):
if n == 1:
return 1
return n**2 + (n-1)**2
在JavaScript中最简单的解决问题的方法:
function shapeArea(n) {
if(n<0) {
return false
}
return (n*n) + ((n-1)*(n-1))
}
console.log(shapeArea(1))
这里提供一种用于推导公式的方法。
图形总是有一个横线穿过中间。如果你画一个矩形包含顶部的正方形和横线,其中将始终存在足够大的空白方块空缺,可以被下方的方块部分填充。
想象一下,在上面的空缺中填充下面的方块。除了n=1之外,你的形状将变为一个仍然有一些白色方块的矩形。让我们看几个例子。
n=2 n=3 n=4
. X . X X . . . X . . X X X . . . . . X . . . X X X X . . .
X X X X X X . X X X . X X X X X . . X X X . . X X X X X X X
. X . . . . X X X X X X X X X X . X X X X X . X X X X X X X
. X X X . . . . . . X X X X X X X X X X X X X X
. . X . . . . . . . . X X X X X . . . . . . . .
. . X X X . . . . . . . . .
. . . X . . . . . . . . . .
面积 = 高度 * 宽度 - 间隙
如果我们将其制成图表以寻找规律,它看起来像这样:n | height | width | gap
1 | 1 | 1 | 0
2 | 2 | 3 | 1
3 | 3 | 5 | 2
4 | 4 | 7 | 3
高度和间距都按照1计数,而宽度则按照2的步进进行计数。你始终可以将这种线性趋势表示为n*skipValue +/- constant
。在此情况下,
height=n
width=2n-1
gap=n-1
area = height * width - gap
变为 area = n * (2n - 1) - (n - 1)
。function shapeArea(n) {
return ((n-1) * (n*2)) + 1;
}
def shapeArea(n):
if n == 1:
return 1
square_side = n+n-1
outer_square_area = square_side**2
white_pieces = 4*(1/2)*n*(n+1)
area = outer_square - white_pieces
return area
1/2*N(N+1)
的公式计算(对于此问题N=n-1)。这些对我来说很好用。
n*n + (n-1) * (n-1)
n * (2*n - 1) - (n-1)
def shapeArea(n):
return 2 * n * (n - 1) + 1;
2*n*(n-1)+1
找到。 - Jay Prakash Thakur这个代码(Python 3)是有效的:
def shapeArea(n):
area = n*n + (n-1)*(n-1)
return area
print(shapeArea(5))
shapeArea(1000)
已经失败了。 - Dima Chubarov