gpt4 book ai didi

php - 获取螺旋矩阵的对角线值

转载 作者:可可西里 更新时间:2023-11-01 13:25:50 26 4
gpt4 key购买 nike

我有一个 n*n 螺旋矩阵。

if N = 4

then matrix :

 7  8  9 10   
6 1 2 11
5 4 3 12
16 15 14 13

if N = 3

 7 8 9
6 1 2
5 4 3

我想得到这个螺旋矩阵的对角线值。

n=4 的情况下,对角线值为 7,1,3,13,10,2,4,16

我可以通过将这个矩阵存储在数组中并遍历每个对角线值来做到这一点。
有没有更好的方法来获取这些值。

最佳答案

为了得到主对角线上的数字,我们可以注意到这些值是

1 = 1
1 + 2 = 3
1 + 2 + 4 = 7
1 + 2 + 4 + 6 = 13

所以一般公式是 1 + (sum i = 0 to k of 2*i) for k = 0, 1, 2, ...对此进行简化,对于 k = 0, 1, 2, ...,我们得到 k^2 + k + 1

在 PHP 中,我们可以通过这样的方式生成这些:

function mainDiagonal($n) {
$values = array();

for ($k = 0; $k < $n; $k++) {
$values[] = $k*$k + $k + 1;
}

return $values;
}

为了得到偶数 N 的反对角线上的数字,我们看到:

2 = 2
2 + 2 = 4
2 + 2 + 6 = 10
2 + 2 + 6 + 6 = 16

如果我们对更大的矩阵继续这种模式,我们会看到一般公式是

将 i = 0 到 k of floor(i/2)*4 + 2 求和,对于 k = 0, 1, 2, ...

同样对于奇数 N 我们发现公式是

1 + (sum i = 0 to k of ceil(i/2)*4) for k = 0, 1, 2, ...

在 PHP 中,我们可以通过这样的方式生成这些:

function antiDiagonal($n) {
$values = array();

if ($n % 2 == 0) {
for ($k = 0; $k < $n; $k++) {
$accum = 0;

for ($j = 0; $j <= $k; $j++) {
$accum += floor($j/2)*4 + 2;
}

$values[] = $accum;
}
} else {
for ($k = 0; $k < $n; $k++) {
$accum = 1;

for ($j = 0; $j <= $k; $j++) {
$accum += ceil($j/2)*4;
}

$values[] = $accum;
}
}

return $values;
}

注意k的最大值比矩阵的维数小一。

结合这些函数,我们得到:

array_unique(array_merge(mainDiagonal($n), antiDiagonal($n)))

关于php - 获取螺旋矩阵的对角线值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com