# A. Cells in a Range on an Excel Sheet (opens new window)
Traverse by row + col.
DETAILS
def cellsInRange(self, s: str) -> List[str]:
start_col, end_col = s[0], s[3]
start_row, end_row = int(s[1]), int(s[4])
ans = []
for i in range(ord(start_col), ord(end_col) + 1):
for j in range(start_row, end_row + 1):
ans.append(chr(i) + str(j))
return ans
# B. Append K Integers With Minimal Sum (opens new window)
My LeetCode Solution (opens new window)\
DETAILS
def minimalKSum(self, nums: List[int], k: int) -> int:
nums = sorted(list(set(nums)))
n = len(nums)
if nums[n - 1] <= k + n:
return (k + n) * (k + n + 1) // 2 - sum(nums)
lft, rgt = 0, n - 1
while rgt > lft:
mid = (lft + rgt) // 2
if nums[mid] - mid <= k:
lft = mid + 1
else:
rgt = mid
return (k + lft + 1) * (k + lft) // 2 - sum(nums[:lft])
# C. Create Binary Tree From Descriptions (opens new window)
BFS Add root to FIFO queue.
DETAILS
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def createBinaryTree(self, A: List[List[int]]) -> Optional[TreeNode]:
lc, rc, p = collections.defaultdict(int), collections.defaultdict(int), collections.defaultdict(int)
al, rootval = set(), -1
for pp, cc, ss in A:
p[cc] = pp
if ss == 1:
lc[pp] = cc
else:
rc[pp] = cc
al.add(pp)
al.add(cc)
for a in al:
if a not in p:
rootval = a
break
root = TreeNode(rootval)
dq = collections.deque()
dq.append(root)
dummy = TreeNode(val=None, left=root)
while dq:
curr = dq.popleft()
if curr.val in lc:
lft = TreeNode(lc[curr.val])
curr.left = lft
dq.append(lft)
if curr.val in rc:
rgt = TreeNode(rc[curr.val])
curr.right = rgt
dq.append(rgt)
return dummy.left
# D. Replace Non-Coprime Numbers in Array (opens new window)
Priority Queue
DETAILS
def replaceNonCoprimes(self, s: List[int]) -> List[int]:
st = []
for num in s:
while st and math.gcd(st[-1], num) > 1:
num = math.lcm(num, st.pop())
st.append(num)
return st