一個程式新手透過Hackrank練習程式的過程紀錄,會用自己能夠理解的白話語言來解釋,有錯誤的話請多多包涵也不吝給予指教。
Table of Contents
問題描述
給一個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));
}
解題關鍵
- 知道Math.Abs的用法。
- array從0開始,所以第一列是 arr[0][0] 減掉 arr[0][2],要記得多減1