算法leetcode每日一练2194. Excel 表中某个范围内的单元格
Posted 二当家的白帽子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法leetcode每日一练2194. Excel 表中某个范围内的单元格相关的知识,希望对你有一定的参考价值。
文章目录
- 2194. Excel 表中某个范围内的单元格:
- 样例 1:
- 样例 2:
- 提示:
- 分析
- 题解
- 原题传送门:https://leetcode-cn.com/problems/cells-in-a-range-on-an-excel-sheet/
2194. Excel 表中某个范围内的单元格:
Excel 表中的一个单元格 (r, c)
会以字符串 "<col><row>"
的形式进行表示,其中:
-
<col>
即单元格的列号c
。用英文字母表中的 字母 标识。- 例如,第
1
列用'A'
表示,第2
列用'B'
表示,第3
列用'C'
表示,以此类推。
- 例如,第
-
<row>
即单元格的行号r
。第r
行就用 整数r
标识。
给你一个格式为 "<col1><row1>:<col2><row2>"
的字符串 s
,其中 <col1>
表示 c1
列,<row1>
表示 r1
行,<col2>
表示 c2
列,<row2>
表示 r2
行,并满足 r1 <= r2
且 c1 <= c2
。
找出所有满足 r1 <= x <= r2
且 c1 <= y <= c2
的单元格,并以列表形式返回。单元格应该按前面描述的格式用 字符串 表示,并以 非递减 顺序排列(先按列排,再按行排)。
样例 1:
输入:
s = "K1:L2"
输出:
["K1","K2","L1","L2"]
解释:
上图显示了列表中应该出现的单元格。
红色箭头指示单元格的出现顺序。
样例 2:
输入:
s = "A1:F1"
输出:
["A1","B1","C1","D1","E1","F1"]
解释:
上图显示了列表中应该出现的单元格。
红色箭头指示单元格的出现顺序。
提示:
- s.length == 5
- ‘A’ <= s[0] <= s[3] <= ‘Z’
- ‘1’ <= s[1] <= s[4] <= ‘9’
- s 由大写英文字母、数字、和 ‘:’ 组成
分析
- 面对这道算法题目,二当家的陷入了沉思。
- 第一步要能从参数字符串中截取出起始行列和终止行列的值。
- 第二步遍历生成结果,由于要求结果有序,所以我们如果可以在生成时就满足要求,就可以不用后面再来一次排序了。
题解
java
class Solution
public List<String> cellsInRange(String s)
List<String> ans = new ArrayList<>();
char[] cs = new char[2];
for (cs[0] = s.charAt(0); cs[0] <= s.charAt(3); cs[0]++)
for (cs[1] = s.charAt(1); cs[1] <= s.charAt(4); cs[1]++)
ans.add(String.valueOf(cs));
return ans;
c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
char ** cellsInRange(char * s, int* returnSize)
*returnSize = (s[3] - s[0] + 1) * (s[4] - s[1] + 1);
char **ans = (char **) malloc(*returnSize * sizeof(char *));
for (char c = s[0]; c <= s[3]; ++c)
for (char r = s[1]; r <= s[4]; ++r)
int index = (c - s[0]) * (s[4] - s[1] + 1) + (r - s[1]);
ans[index] = (char *) malloc(3 * sizeof(char));
ans[index][0] = c;
ans[index][1] = r;
ans[index][2] = '\\0';
return ans;
c++
class Solution
public:
vector<string> cellsInRange(string s)
vector<string> ans;
for (char c = s[0]; c <= s[3]; ++c)
for (char r = s[1]; r <= s[4]; ++r)
ans.push_back(c, r);
return ans;
;
python
class Solution:
def cellsInRange(self, s: str) -> List[str]:
return [chr(c) + chr(r) for c in range(ord(s[0]), ord(s[3]) + 1) for r in range(ord(s[1]), ord(s[4]) + 1)]
go
func cellsInRange(s string) []string
var ans []string
for c := s[0]; c <= s[3]; c++
for r := s[1]; r <= s[4]; r++
ans = append(ans, string(c)+string(r))
return ans
rust
impl Solution
pub fn cells_in_range(s: String) -> Vec<String>
let mut ans = Vec::new();
(s.as_bytes()[0]..(s.as_bytes()[3] + 1)).for_each(|c|
(s.as_bytes()[1]..(s.as_bytes()[4] + 1)).for_each(|r|
ans.push(String::from_utf8(vec![c, r]).unwrap());
);
);
ans
javascript
/**
* @param string s
* @return string[]
*/
var cellsInRange = function(s)
let ans = [];
for (let c = s[0].charCodeAt(); c <= s[3].charCodeAt(); c++)
for (let r = s[1]; r <= s[4]; r++)
ans.push(String.fromCharCode(c) + r);
return ans;
;
typescript
function cellsInRange(s: string): string[]
let ans = [];
for (let c = s[0].charCodeAt(0); c <= s[3].charCodeAt(0); c++)
for (let r = Number.parseInt(s[1]); r <= Number.parseInt(s[4]); r++)
ans.push(String.fromCharCode(c) + r);
return ans;
;
原题传送门:https://leetcode-cn.com/problems/cells-in-a-range-on-an-excel-sheet/
非常感谢你阅读本文~
欢迎【👍点赞】【⭐收藏】【📝评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
以上是关于算法leetcode每日一练2194. Excel 表中某个范围内的单元格的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode每日一练2161. 根据给定数字划分数组
算法leetcode每日一练2220. 转换数字的最少位翻转次数