螺旋矩阵对角元素和

时间:2019-04-02 12:14:01

标签: c++ algorithm aptitude

让n = 5,然后为矩阵

1  2  3  4  5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8 
13 12 11 10 9

那么对角元素的总和是:

=1+17+25+21+9+5+19+23+13

n = 15的总和?

一种方法是制作螺旋矩阵,然后通过循环得到答案,但是它的时间和空间复杂度很大。

赞这个https://www.geeksforgeeks.org/sum-diagonals-spiral-odd-order-square-matrix/ 但是这里的问题是从中心开始1。

2 个答案:

答案 0 :(得分:1)

考虑矩阵的外部“外壳”。给定的大小为 n (示例中为5),起始值为 s (示例中为1),四个顶点的值之和为

s +(s +(n-1))+(s +(n-1)* 2)+(s +(n-1)* 3)= 4 * s +(n -1)* 6

内部值也一样,一旦更新 n s

s = s + 4 *(n-1)
n = n-2

如果 n 小于2,那么,要么我们有中心元素,要么什么都没有( n 是偶数)。

答案 1 :(得分:0)

根据 Bob_ 的回答,这是 OP 要求的 CPP 中的递归代码

int shellcalc(int n,int s){
    if(n==1)
        return s;
    else if(n==0)
        return 0;
    else
    {
        int sum=4*s+(n-1)*6;
        int snew=s+4*(n-1);
        int nnew=n-2;
        return sum+shellcalc(nnew,snew);
    }
}

在这里试试https://rextester.com/FLJD46264
Python - https://rextester.com/MDMV32855