# 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