本篇博客会讲解力扣“2194. Excel 表中某个范围内的单元格”的解题思路,这是题目链接。
先来审题:
以下是输出示例和提示:
这道题的解题思路是:模拟,遍历每一列,某一列遍历完后遍历下一列。
下面我们需要解决几个问题。
- 行数和列数是多少?这要由题目给的字符串决定,比如"A1:F1",列数是
F-A+1
,行数是1-1+1
。 - 字符串数组有几个元素?有
行数×列数
个元素。 - 外层循环是行还是列?是列,只有遍历完某一列,才遍历下一列。
- 假设遍历到第i列,第j行,则是第几个字符串?是第
i×行数+j
个字符串。 - 每个字符串的长度是多少?字符数组开多大?长度是2,但是要开3个空间,因为要存储字符串末尾的结束标志
\0
。
代码如下:
char ** cellsInRange(char * s, int* returnSize){
int colSize = s[3] - s[0] + 1; // 列数
int rowSize = s[4] - s[1] + 1; // 行数
*returnSize = colSize * rowSize;
char** ret = (char**)malloc(sizeof(char**)* *returnSize);
for (int i = 0; i < colSize; ++i)
{
for (int j = 0; j < rowSize; ++j)
{
int k = i * rowSize + j; // 计算是第几格
ret[k] = (char*)calloc(3, sizeof(char));
// 设置第k格对应的字符串
ret[k][0] = s[0] + i;
ret[k][1] = s[1] + j;
}
}
return ret;
}
通过!
总结
本题的关键是数组的遍历,同时由于是类似矩阵的结构,需要使用2层循环。
感谢大家的阅读!