|
6 | 6 |
|
7 | 7 | <!-- 这里写题目描述 -->
|
8 | 8 |
|
9 |
| -<p>你的任务是实现 Excel 的求和功能,具体的操作如下:</p> |
| 9 | +<p>请你设计 <strong>Excel</strong> 中的基本功能,并实现求和公式。</p> |
10 | 10 |
|
11 |
| -<p><code>Excel(int H, char W):</code> 这是一个构造函数,输入表明了 Excel 的高度和宽度。H 是一个正整数,范围从 1 到 26,代表高度。W 是一个字符,范围从 'A' 到 'Z',宽度等于从 'A' 到 W 的字母个数。Excel 表格是一个高度 * 宽度的二维整数数组,数组中元素初始化为 0。第一行下标从 1 开始,第一列下标从 'A' 开始。</p> |
| 11 | +<p>实现 <code>Excel</code> 类:</p> |
12 | 12 |
|
13 |
| -<p> </p> |
14 |
| - |
15 |
| -<p><code>void Set(int row, char column, int val):</code> 设置 <code>C(row, column)</code> 中的值为 val。</p> |
16 |
| - |
17 |
| -<p> </p> |
18 |
| - |
19 |
| -<p><code>int Get(int row, char column):</code> 返回 <code>C(row, column)</code> 中的值。</p> |
20 |
| - |
21 |
| -<p> </p> |
22 |
| - |
23 |
| -<p><code>int Sum(int row, char column, List of Strings : numbers):</code> 这个函数会将计算的结果放入 <code>C(row, column)</code> 中,计算的结果等于在 <code>numbers</code> 中代表的所有元素之和,这个函数同时也会将这个结果返回。求和公式会一直计算更新结果直到这个公式被其他的值或者公式覆盖。</p> |
24 |
| - |
25 |
| -<p><code>numbers</code> 是若干字符串的集合,每个字符串代表单个位置或一个区间。如果这个字符串表示单个位置,它的格式如下:<code>ColRow</code>,例如 "F7" 表示位置 (7, F) 。如果这个字符串表示一个区间,它的格式如下:<code>ColRow1:ColRow2</code>。区间就是左上角为 ColRow1 右下角为 ColRow2 的长方形。</p> |
| 13 | +<ul> |
| 14 | + <li><code>Excel(int height, char width)</code>:用高度 <code>height</code> 和宽度 <code>width</code> 初始化对象。该表格是一个大小为 <code>height x width</code> 的整数矩阵 <code>mat</code>,其中行下标范围是 <code>[1, height]</code> ,列下标范围是 <code>['A', width]</code> 。初始情况下,所有的值都应该为 <strong>零</strong> 。</li> |
| 15 | + <li><code>void set(int row, char column, int val)</code>:将 <code>mat[row][column]</code> 的值更改为 <code>val</code> 。</li> |
| 16 | + <li><code>int get(int row, char column)</code>:返回 <code>mat[row][column]</code> 的值。</li> |
| 17 | + <li><code>int sum(int row, char column, List<String> numbers)</code>:将 <code>mat[row][column]</code> 的值设为由 <code>numbers</code> 表示的单元格的和,并返回 <code>mat[row][column]</code> 的值。此求和公式应该 <strong>长期作用于</strong> 该单元格,直到该单元格被另一个值或另一个求和公式覆盖。其中,<code>numbers[i]</code> 的格式可以为: |
| 18 | + <ul> |
| 19 | + <li><code>"ColRow"</code>:表示某个单元格。 |
| 20 | + <ul> |
| 21 | + <li>例如,<code>"F7"</code> 表示单元格 <code>mat[7]['F']</code> 。</li> |
| 22 | + </ul> |
| 23 | + </li> |
| 24 | + <li><code>"ColRow1:ColRow2"</code>:表示一组单元格。该范围将始终为一个矩形,其中 <code>"ColRow1"</code> 表示左上角单元格的位置,<code>"ColRow2"</code> 表示右下角单元格的位置。 |
| 25 | + <ul> |
| 26 | + <li>例如,<code>"B3:F7"</code> 表示 <code>3 <= i <= 7</code> 和 <code>'B' <= j <= 'F'</code> 的单元格 <code>mat[i][j]</code> 。</li> |
| 27 | + </ul> |
| 28 | + </li> |
| 29 | + </ul> |
| 30 | + </li> |
| 31 | +</ul> |
26 | 32 |
|
27 |
| -<p> </p> |
| 33 | +<p><strong>注意:</strong>可以假设不会出现循环求和引用。</p> |
28 | 34 |
|
29 |
| -<p><strong>注意: </strong>你可以认为不会出现循环求和的定义,比如说:<code>mat[1]['A'] == sum(1, "B")</code> 和 <code>mat[1]['B'] == sum(1, "A")</code>.</p> |
| 35 | +<ul> |
| 36 | + <li>例如,<code>mat[1]['A'] == sum(1, "B")</code>,且 <code>mat[1]['B'] == sum(1, "A")</code> 。</li> |
| 37 | +</ul> |
30 | 38 |
|
31 |
| -<p> </p> |
| 39 | +<p> </p> |
32 | 40 |
|
33 |
| -<p><strong>示例 1:</strong></p> |
| 41 | +<p><strong>示例 1:</strong></p> |
34 | 42 |
|
35 | 43 | <pre>
|
36 |
| -<strong>输入:</strong> |
37 |
| -["Excel", "set", "sum", "set", "get"] |
| 44 | +<strong>输入: |
| 45 | +</strong>["Excel", "set", "sum", "set", "get"] |
38 | 46 | [[3, "C"], [1, "A", 2], [3, "C", ["A1", "A1:B2"]], [2, "B", 2], [3, "C"]]
|
39 |
| -<b>输出:</b> |
| 47 | +<strong>输出:</strong> |
40 | 48 | [null, null, 4, null, 6]
|
41 | 49 |
|
42 |
| -<b>解释:</b> |
| 50 | +<strong>解释:</strong> |
| 51 | +执行以下操作: |
43 | 52 | Excel excel = new Excel(3, "C");
|
44 |
| - // 构造一个 3*3 的二维数组,初始化全是 0。 |
| 53 | + // 构造一个 3 * 3 的二维数组,所有值初始化为零。 |
45 | 54 | // A B C
|
46 | 55 | // 1 0 0 0
|
47 | 56 | // 2 0 0 0
|
48 | 57 | // 3 0 0 0
|
49 | 58 | excel.set(1, "A", 2);
|
50 |
| - // 设置 C(1,"A") 为 2。 |
| 59 | + // 将 mat[1]["A"] 设置为 2 。 |
51 | 60 | // A B C
|
52 | 61 | // 1 2 0 0
|
53 | 62 | // 2 0 0 0
|
54 | 63 | // 3 0 0 0
|
55 |
| -excel.sum(3, "C", ["A1", "A1:B2"]); // return 4 |
56 |
| - // 将 C(3,"C") 的值设为 C(1,"A") 单点以及左上角为 C(1,"A") 右下角为 C(2,"B") 的长方形两者之和。返回值 4。 |
| 64 | +excel.sum(3, "C", ["A1", "A1:B2"]); // 返回 4 |
| 65 | + // 将 mat[3]["C"] 设置为 mat[1]["A"] 的值与矩形范围的单元格和的和,该范围的左上角单元格位置为 mat[1]["A"] ,右下角单元格位置为 mat[2]["B"] 。 |
| 66 | + // A B C |
57 | 67 | // 1 2 0 0
|
58 | 68 | // 2 0 0 0
|
59 | 69 | // 3 0 0 4
|
60 | 70 | excel.set(2, "B", 2);
|
61 |
| -// 将 C(2,"B") 设为 2。 注意 C(3, "C") 的值也同时改变。 |
| 71 | + // 将 mat[2]["B"] 设置为 2 。注意 mat[3]["C"] 也应该更改。 |
62 | 72 | // A B C
|
63 | 73 | // 1 2 0 0
|
64 | 74 | // 2 0 2 0
|
65 | 75 | // 3 0 0 6
|
66 |
| -excel.get(3, "C"); // 返回 6</pre> |
| 76 | +excel.get(3, "C"); // 返回 6 |
| 77 | +</pre> |
67 | 78 |
|
68 |
| -<p> </p> |
| 79 | +<p> </p> |
69 | 80 |
|
70 |
| -<p><strong>提示:</strong></p> |
| 81 | +<p><strong>提示:</strong></p> |
71 | 82 |
|
72 | 83 | <ul>
|
73 |
| - <li><code>1 <= height <= 26</code></li> |
74 |
| - <li><code>'A' <= width <= 'Z'</code></li> |
75 |
| - <li><code>1 <= row <= height</code></li> |
76 |
| - <li><code>'A' <= column <= width</code></li> |
77 |
| - <li><code>-100 <= val <= 100</code></li> |
78 |
| - <li><code>1 <= numbers.length <= 5</code></li> |
79 |
| - <li><code>numbers[i]</code> 的格式为 <code>"ColRow"</code> 或 <code>"ColRow1:ColRow2"</code>.</li> |
80 |
| - <li><code>set</code>, <code>get</code>, and <code>sum</code> 操作数不超过 100 次</li> |
| 84 | + <li><code>1 <= height <= 26</code></li> |
| 85 | + <li><code>'A' <= width <= 'Z'</code></li> |
| 86 | + <li><code>1 <= row <= height</code></li> |
| 87 | + <li><code>'A' <= column <= width</code></li> |
| 88 | + <li><code>-100 <= val <= 100</code></li> |
| 89 | + <li><code>1 <= numbers.length <= 5</code></li> |
| 90 | + <li><code>numbers[i]</code> 的格式为 <code>"ColRow"</code> 或 <code>"ColRow1:ColRow2"</code> 。</li> |
| 91 | + <li>最多会对 <code>set</code> 、<code>get</code> 和 <code>sum</code> 进行 <code>100</code> 次调用。</li> |
81 | 92 | </ul>
|
82 | 93 |
|
83 |
| -<p> </p> |
84 |
| - |
85 |
| -<ol> |
86 |
| -</ol> |
87 |
| - |
88 |
| -<p> </p> |
89 |
| - |
90 | 94 | ## 解法
|
91 | 95 |
|
92 | 96 | <!-- 这里可写通用的实现逻辑 -->
|
|
0 commit comments