[HackerRank][C#] Diagonal Difference Solution 對角線差距

分享

一個程式新手透過Hackrank練習程式的過程紀錄,會用自己能夠理解的白話語言來解釋,有錯誤的話請多多包涵也不吝給予指教。

問題描述

給一個NxN正方形矩陣,計算出對角線的總和,相減之後的絕對值。

範例

1 2 3
4 5 6
9 8 9  

左上到右下的對角線為 1 + 5 + 9 = 15,右上到左下的對角線為 3 + 5 + 9 = 17。

15 – 17 = -2,取絕對值為2。

3
11 2 4
4 5 6
10 8 -12

左上到右下的對角線為 11 + 5 + (-12) = 4,右上到左下的對角線為 4 + 5 + 10 = 19。

4 – 19 = -15,取絕對值為15。

輸出入格式

input

List<List<int>> arr,二維陣列。

output

int,一個正整數

Solution 1

想法很簡單,觀察一下會發現不用真的相加後再相減,而是逐一相減就好了。

第一列第一個減第三個。 ( 1-3 = -2 )
第二列相減為零。 ( 5-5 = 0 )
第三列第三個減第一個。 ( 9-9 = 0 )
最後再取絕對值即可,概念上大概如此。 (-2+0+0 = -2,取絕對值為2)

既然有這種方式,那看起來一個迴圈就可以了。

    /*
     * Complete the 'diagonalDifference' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts 2D_INTEGER_ARRAY arr as parameter.
     */

    public static int diagonalDifference(List<List<int>> arr)
    {
        decimal sum = 0m;
        for(int i=0;i<arr.Count();i++){
            sum += arr[i][i] - arr[i][arr.Count() - i - 1];
        }
        return Decimal.ToInt32(Math.Abs(sum));
    }

解題關鍵

  1. 知道Math.Abs的用法。
  2. array從0開始,所以第一列是 arr[0][0] 減掉 arr[0][2],要記得多減1

分享
Scroll to Top