LeetCode 3484. Design Spreadsheet
biweekly contest 152。
非常妙的題,根據做法不同,麻煩程度差非常多。
題目
https://leetcode.com/problems/design-spreadsheet/description/
解法
一看就是類似 excel 的表格。
但是很良心,列數只有從 A-Z,沒有奇怪的 AFZXC 這種列號,不需要把列號轉換回整數。
也只有單格修改,沒有範圍修改。
甚至只有加法函數。
有些同學可能很老實,自己開了個 row * col 陣列來當表格。
其實直接拿 cell 當作 key 拿去雜湊表就好。
實際上只需要做兩個功能:
- parse(String s):若 s 是 cell 則回傳對應值;否則解析成整數。
- getValue(String formula):把 formula 拆成兩個字串 parse 後加總。
時間複雜度 O(N),其中 N 為不同的 cell 個數。
空間複雜度 O(N)。
class Spreadsheet:
def __init__(self, rows: int):
self.d = Counter()
def setCell(self, cell: str, value: int) -> None:
self.d[cell] = value
def resetCell(self, cell: str) -> None:
del self.d[cell]
def getValue(self, formula: str) -> int:
A, B = formula[1:].split("+")
return self.parse(A) + self.parse(B)
def parse(self, cell):
if cell.isdigit():
return int(cell)
else:
return self.d[cell]