iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
自我挑戰組

leetcode 30天 不中斷解題挑戰系列 第 21

Day21 leetcode 隨機挑題 (Tree、Math、Matrix)

  • 分享至 

  • xImage
  •  

首先是 623. Add One Row to Tree (medium)
https://leetcode.com/problems/add-one-row-to-tree/

給一個二元樹,在指定的深度塞一排指定的值

想法:
基本上就是直接遞迴寫下去了比較方便

  1. 找到指定深度
  2. 建立Node
  3. 替換掉原Node點,並塞在新Node底下
  4. 結束
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def addOneRow(self, root: Optional[TreeNode], val: int, depth: int) -> Optional[TreeNode]:
        def dfs(root,deep = 1):
            if root is None:
                return
            if deep+1 == depth:
                # if root.left:
                temp = root.left
                valTemp = TreeNode(val)
                valTemp.left = temp
                root.left = valTemp
                # if root.right:
                temp = root.right
                valTemp = TreeNode(val)
                valTemp.right = temp
                root.right = valTemp
                return
            dfs(root.left,deep+1)
            dfs(root.right,deep+1)
        if depth == 1:
            temp = TreeNode(val)
            temp.left = root
            return temp
        dfs(root)
        return root

再來是 202. Happy Number (easy)
https://leetcode.com/problems/happy-number

丟一個數字n,把每一位數平方後相加,看最後會不會變成整數1

想法:
原則上就是紀錄的問題,要把跑過的數字記錄下來。
然後就依照題目的要求進行平方相加持續這個過程,若這個過程中有遇到一樣的數字,那就沒救了,return False

class Solution:
    def isHappy(self, n: int) -> bool:
        path = set()
        while n != 1:
            temp = str(n)
            n = 0
            for i in temp:
                n += int(i)**2
            if n in path:
                return False
            path.add(n)
        return True
    
    #另外一種不用for i in str的寫法
    def isHappy(self, n: int) -> bool:
        path = set()
        while n!=1:
            total = 0
            while n:
                temp = n % 10
                n = n // 10
                total += temp**2
            if total in path:
                return False
            n = total
            path.add(n)
        return True

最後是 54. Spiral Matrix (medium)
https://leetcode.com/problems/spiral-matrix/

直接上圖
https://ithelp.ithome.com.tw/upload/images/20221006/20108649qvtSRhrGQl.jpg
要用螺旋的方式讀取matrix裡的全部數值,並存到list裡回傳。

想法:
老實說一開始看到這題有被唬到,直接硬肛不太好寫。
後來發現到,其實就是一直旋轉matrix然後把第一列的數字丟到list裡即可

class Solution:
    #就是邊丟東西出來邊選轉45度
    def spiralOrder(self, matrix):
        def turn45(matrix):
            if matrix == []:
                return []
            L,W = len(matrix),len(matrix[0])
            result = []
            for j in range(-1,-(W+1),-1):
                temp = []
                for i in range(L):
                    temp.append(matrix[i][j])
                result.append(temp)
            return result
    
        ans = []
        # print(*turn45(matrix))
        while matrix:
            temp = matrix.pop(0)
            ans += temp
            matrix = turn45(matrix)
        return ans
            
            
# 1 2 3               # 6 9    
# 4 5 6 -> # 4 5 6 -> # 5 8 -> # 5 8 -> # 8 7 -> 
# 7 8 9    # 7 8 9    # 4 7    # 4 7    # 5 4    # 5 4 -> # 4 5 -> 空

#[1,2,3,6,9,8,7,4,5]

以上為今天的練習,感謝觀看


上一篇
Day20 leetcode隨機挑題 (Stack、Two Pointer、String)
下一篇
Day22 leetcode隨機挑題 (Design、Matrix、Search)
系列文
leetcode 30天 不中斷解題挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言