程式設計實踐筆記No.16
阿新 • • 發佈:2021-01-29
技術標籤:程式設計實踐
程式設計實踐筆記No.16
寫在最前面,程式設計一直是我的短板,希望在leetcode練習中獲得進步!
參考Datawhale組隊學習中“LeetCodeTencent”
題目一237 刪除連結串列中的節點
請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。
程式碼
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node. val = node.next.val
node.next = node.next.next
題目二 238 除自身以外陣列的乘積
給定長度為 n 的整數陣列 nums,其中 n > 1,返回輸出陣列 output,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。
程式碼
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
length = len(nums)
# L 和 R 分別表示左右兩側的乘積列表
L, R, answer = [0]*length, [0]*length, [0]*length
# L[i] 為索引 i 左側所有元素的乘積
# 對於索引為 '0' 的元素,因為左側沒有元素,所以 L[0] = 1
L[0] = 1
for i in range(1, length):
L[i] = nums[i - 1] * L[i - 1]
# R[i] 為索引 i 右側所有元素的乘積
# 對於索引為 'length-1' 的元素,因為右側沒有元素,所以 R[length-1] = 1
R[length - 1] = 1
for i in reversed(range(length - 1)):
R[i] = nums[i + 1] * R[i + 1]
# 對於索引 i,除 nums[i] 之外其餘各元素的乘積就是左側所有元素的乘積乘以右側所有元素的乘積
for i in range(length):
answer[i] = L[i] * R[i]
return answer
題目三 292 Nim 遊戲
你和你的朋友,兩個人一起玩 Nim 遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作為先手。
你們是聰明人,每一步都是最優解。 編寫一個函式,來判斷你是否可以在給定石頭
思路
[1,3]先手贏
[4]後手贏
[5,7]先手贏,因為你可以使到對方回合時是剩下4個石子
[8]後手贏,此時對方可以使在你的回合時剩下4個石子
以次類推可以發現當n為4的倍數時先手總會輸
程式碼
class Solution:
def canWinNim(self, n: int) -> bool:
return n%4 !=0