Find the sum of the diagonal elements of the given N X N spiral matrix

Given N which is the size of the N X N spiral matrix of the form: 
 
16 15 14 13 5 4 3 12 6 1 2 11 7 8 9 10
The task is to find the sum of the diagonal elements of this matrix.
Examples: 
 
Input: N = 3 Output: 25 5 4 3 6 1 2 7 8 9 The sum of elements along its two diagonals will be 1 + 3 + 7 + 5 + 9 = 25 Input: N = 5 Output: 101
Recursive Approach: The idea behind the solution is to use recursion to compute sum of the diagonal elements.
Below is the implementation of the above approach:
C++
| // C++ implementation of the approach#include <bits/stdc++.h>usingnamespacestd;// Function to return the sum of both the// diagonal elements of the required matrixintfindSum(intn){    // Base cases    if(n == 0) {        return0;    }    if(n == 1) {        return1;    }        intans = 0;    // Computing for ans    for(inti = 2; i <= n; i++) {        ans =(4 * (i * i))                - 6 * (i - 1) + findSum(n - 2);    }    // Return ans;    returnans;}// Driver codeintmain(){    intn = 4;    cout << findSum(n);    return0;} | 
Java
| // Java implementation of the approachimportjava.util.*;publicclassGFG{  // Function to return the sum of both the// diagonal elements of the required matrixstaticintfindSum(intn){    // Base cases    if(n == 0) {        return0;    }    if(n == 1) {        return1;    }        intans = 0;    // Computing for ans    for(inti = 2; i <= n; i++) {        ans =(4* (i * i))                - 6* (i - 1) + findSum(n - 2);    }    // Return ans;    returnans;}// Driver codepublicstaticvoidmain(String args[]){    intn = 4;        System.out.println(findSum(n));    }}// This code is contributed by Samim Hossain Mondal. | 
Python3
| # Python 3 implementation of the approach# Function to return the sum of both the# diagonal elements of the required matrixdeffindSum(n):    # Base cases    if(n ==0):        return0            if(n ==1):        return1        ans =0    # Computing for ans    fori inrange(2, n +1, 1):        ans =((4*(i *i)) -6*                      (i -1) +findSum(n -2))    returnans# Driver codeif__name__ =='__main__':    n =4    print(findSum(n))# This code is contributed by# Samim Hossain Mondal | 
C#
| // C# implementation of the approachusingSystem;classGFG{  // Function to return the sum of both the// diagonal elements of the required matrixstaticintfindSum(intn){    // Base cases    if(n == 0) {        return0;    }    if(n == 1) {        return1;    }        intans = 0;    // Computing for ans    for(inti = 2; i <= n; i++) {        ans =(4 * (i * i))                - 6 * (i - 1) + findSum(n - 2);    }    // Return ans;    returnans;}// Driver codepublicstaticvoidMain(){    intn = 4;        Console.Write(findSum(n));    }}// This code is contributed by Samim Hossain Mondal. | 
Javascript
| <script>// Javascript implementation of the approach// Function to return the sum of both the// diagonal elements of the required matrixfunctionfindSum(n){    // Base cases    if(n == 0) {        return0;    }    if(n == 1) {        return1;    }        let ans = 0;    // Computing for ans    for(let i = 2; i <= n; i++) {        ans =(4 * (i * i))                - 6 * (i - 1) + findSum(n - 2);    }    // Return ans;    returnans;}// Driver codelet n = 4;document.write(findSum(n));// This code is contributed by Samim Hossain Mondal.</script> | 
56
Time Complexity: O(2N)
Auxiliary Space: O(1)
Dynamic Programming Approach: Idea behind the solution is to use the concept of Dynamic Programming. We will use array dp[] to store our solution. N given in the problem can either be even or odd. 
When i is odd, we have to add only 4 corner elements in dp[i – 2]. 
 
dp[i] = dp[i – 2] + (i – 2) * (i – 2) + (i – 1) + (i – 2) * (i – 2) + 2 * (i – 1) + (i – 2) * (i – 2) + 3 * (i – 1) + (i – 2) * (i – 2) + 4 * (i – 1)
dp[i] = dp[i – 2] + 4 * (i – 2) * (i – 2) + 10 * (i – 1)
dp[i] = dp[i – 2] + 4 * (i) * (i) – 6 * (i – 1)
Similarly, we can check that the above formula is true when i is even.
Below is the implementation of the above approach: 
 
C++
| // C++ implementation of the approach#include <bits/stdc++.h>usingnamespacestd;// Function to return the sum of both the// diagonal elements of the required matrixintfindSum(intn){    // Array to store sum of diagonal elements    intdp[n + 1];    // Base cases    dp[1] = 1;    dp[0] = 0;    // Computing the value of dp    for(inti = 2; i <= n; i++) {        dp[i] = (4 * (i * i))                - 6 * (i - 1) + dp[i - 2];    }    returndp[n];}// Driver codeintmain(){    intn = 4;    cout << findSum(n);    return0;} | 
Java
| // Java implementation of the approachclassGFG{    // Function to return the sum of both the// diagonal elements of the required matrixstaticintfindSum(intn){    // Array to store sum of diagonal elements    int[] dp = newint[n + 1];    // Base cases    dp[1] = 1;    dp[0] = 0;    // Computing the value of dp    for(inti = 2; i <= n; i++)     {        dp[i] = (4* (i * i)) - 6*                     (i - 1) + dp[i - 2];    }    returndp[n];}// Driver codepublicstaticvoidmain(String args[]){    intn = 4;    System.out.println(findSum(n));}}// This code is contributed by Akanksha Rai | 
Python3
| # Python 3 implementation of the approach# Function to return the sum of both the# diagonal elements of the required matrixdeffindSum(n):        # Array to store sum of diagonal elements    dp =[0fori inrange(n +1)]    # Base cases    dp[1] =1    dp[0] =0    # Computing the value of dp    fori inrange(2, n +1, 1):        dp[i] =((4*(i *i)) -6*                      (i -1) +dp[i -2])    returndp[n]# Driver codeif__name__ =='__main__':    n =4    print(findSum(n))# This code is contributed by# Surendra_Gangwar | 
C#
| // C# implementation of the approachclassGFG{    // Function to return the sum of both the// diagonal elements of the required matrixstaticintfindSum(intn){    // Array to store sum of diagonal elements    int[] dp = newint[n + 1];    // Base cases    dp[1] = 1;    dp[0] = 0;    // Computing the value of dp    for(inti = 2; i <= n; i++)     {        dp[i] = (4 * (i * i))                - 6 * (i - 1) + dp[i - 2];    }    returndp[n];}// Driver codestaticvoidMain(){    intn = 4;    System.Console.WriteLine(findSum(n));}}// This code is contributed by mits | 
PHP
| <?php// PHP implementation of the approach// Function to return the sum of both the// diagonal elements of the required matrixfunctionfindSum($n){        // Array to store sum of diagonal elements    $dp= array();    // Base cases    $dp[1] = 1;    $dp[0] = 0;    // Computing the value of dp    for($i= 2; $i<= $n; $i++)     {        $dp[$i] = (4 * ($i* $i)) - 6 *                        ($i- 1) + $dp[$i- 2];    }    return$dp[$n];}// Driver code$n= 4;echofindSum($n);// This code is contributed by Akanksha Rai?> | 
Javascript
| <script>// Javascript implementation of the approach// Function to return the sum of both the// diagonal elements of the required matrixlet findSum(n){    // Array to store sum of diagonal elements    let dp = newArray(n + 1);    // Base cases    dp[1] = 1;    dp[0] = 0;    // Computing the value of dp    for(let i = 2; i <= n; i++) {        dp[i] = (4 * (i * i))                - 6 * (i - 1) + dp[i - 2];    }    returndp[n];}// Driver codelet n = 4;document.write(findSum(n));// This code is contributed by rishavmahato348.</script> | 
56
Time Complexity: O(N)
Auxiliary Space: O(N)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!
 
				 
					


