官方解答 · 置頂Java
官方解答|格點欄交錯和
官方解答|格點欄交錯和
解題思路
依原欄順序取出每一欄,先保留奇數,把值轉為 -x,再計算交錯加減。每組獨立呼叫 aggregate,組內順序維持原列或原欄順序。
正確性與邊界
空群組的 aggregate 為 0;列報表保留長度為 0 的列,欄報表只產生實際存在的欄。空矩陣沒有任何群組。交錯加減從每群第一個保留值取正,不由原位置決定正負。
複雜度
設 r、c 為列欄數。時間 O(rc),額外空間 O(max(r,c)),另需存放報表。
公開範例
輸入 {"grid": []},依上述步驟得到 []。
下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
import java.util.*;
public class Solution {
private static int aggregate(List<Integer> values) {
int answer = 0;
for (int i = 0; i < values.size(); i++)
answer += (i % 2 == 0 ? values.get(i) : -values.get(i));
return answer;
}
public static List<Integer> solve(int[][] grid) {
List<Integer> result = new ArrayList<>();
int columns = grid.length == 0 ? 0 : grid[0].length;
for (int col = 0; col < columns; col++) {
List<Integer> values = new ArrayList<>();
for (int row = 0; row < grid.length; row++) {
int x = grid[row][col];
if (x % 2 != 0) values.add(-x);
}
result.add(aggregate(values));
}
return result;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。