631. 设计 Excel 求和公式 🔒
题目描述
请你设计 Excel 中的基本功能,并实现求和公式。
实现 Excel 类:
Excel(int height, char width):用高度height和宽度width初始化对象。该表格是一个大小为height x width的整数矩阵mat,其中行下标范围是[1, height],列下标范围是['A', width]。初始情况下,所有的值都应该为 零 。void set(int row, char column, int val):将mat[row][column]的值更改为val。int get(int row, char column):返回mat[row][column]的值。int sum(int row, char column, List<String> numbers):将mat[row][column]的值设为由numbers表示的单元格的和,并返回mat[row][column]的值。此求和公式应该 长期作用于 该单元格,直到该单元格被另一个值或另一个求和公式覆盖。其中,numbers[i]的格式可以为:"ColRow":表示某个单元格。- 例如,
"F7"表示单元格mat[7]['F']。
- 例如,
"ColRow1:ColRow2":表示一组单元格。该范围将始终为一个矩形,其中"ColRow1"表示左上角单元格的位置,"ColRow2"表示右下角单元格的位置。- 例如,
"B3:F7"表示3 <= i <= 7和'B' <= j <= 'F'的单元格mat[i][j]。
- 例如,
注意:可以假设不会出现循环求和引用。
- 例如,
mat[1]['A'] == sum(1, "B"),且mat[1]['B'] == sum(1, "A")。
示例 1:
输入: ["Excel", "set", "sum", "set", "get"] [[3, "C"], [1, "A", 2], [3, "C", ["A1", "A1:B2"]], [2, "B", 2], [3, "C"]] 输出: [null, null, 4, null, 6] 解释: 执行以下操作: Excel excel = new Excel(3, "C"); // 构造一个 3 * 3 的二维数组,所有值初始化为零。 // A B C // 1 0 0 0 // 2 0 0 0 // 3 0 0 0 excel.set(1, "A", 2); // 将 mat[1]["A"] 设置为 2 。 // A B C // 1 2 0 0 // 2 0 0 0 // 3 0 0 0 excel.sum(3, "C", ["A1", "A1:B2"]); // 返回 4 // 将 mat[3]["C"] 设置为 mat[1]["A"] 的值与矩形范围的单元格和的和,该范围的左上角单元格位置为 mat[1]["A"] ,右下角单元格位置为 mat[2]["B"] 。 // A B C // 1 2 0 0 // 2 0 0 0 // 3 0 0 4 excel.set(2, "B", 2); // 将 mat[2]["B"] 设置为 2 。注意 mat[3]["C"] 也应该更改。 // A B C // 1 2 0 0 // 2 0 2 0 // 3 0 0 6 excel.get(3, "C"); // 返回 6
提示:
1 <= height <= 26'A' <= width <= 'Z'1 <= row <= height'A' <= column <= width-100 <= val <= 1001 <= numbers.length <= 5numbers[i]的格式为"ColRow"或"ColRow1:ColRow2"。- 最多会对
set、get和sum进行100次调用。
解法
方法一
1 | |
1 | |
1 | |
1 | |