LeedCode刷题
生活随笔
收集整理的這篇文章主要介紹了
LeedCode刷题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、最接近三數之和
1、題目描述
2、題解
3、源碼
二、電話號碼的字母組合
1、題目描述
2、題解
3、源碼
三、四數之和
1、題目描述
2、題解
3、源碼
四、刪除鏈表的倒數第N個結點
1、題目描述
2、題解
3、源碼?
五、有效括號
1、題目描述
2、題解
3、源碼
一、最接近三數之和
1、題目描述
?
2、題解
3、源碼
class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:best = 10**7n = len(nums)nums.sort()for i in range(n):if i > 0 and nums[i] == nums[i - 1]:continueL = i + 1R = n - 1while L < R:s = nums[i] + nums[L] + nums[R]if s == target:return targetif abs(s - target) < abs(best - target):best = sif s > target:R -= 1while L < R and nums[R] == nums [R + 1]:R -=1else:L +=1while L < R and nums[L] == nums[L - 1]:L +=1return best二、電話號碼的字母組合
1、題目描述
?
2、題解
?
3、源碼
class Solution:def letterCombinations(self, digits: str) -> List[str]:if digits == '':return []phoneMap = {"2": "abc","3": "def","4": "ghi","5": "jkl","6": "mno","7": "pqrs","8": "tuv","9": "wxyz",}res = ['']for num in digits:chars = phoneMap[num]new_res = []for r in res:for char in chars:new_res.append(r+char)res = new_resreturn res三、四數之和
1、題目描述
?
2、題解
3、源碼
class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:quadruplets = list()if not nums or len(nums) < 4:return quadrupletsnums.sort()length = len(nums)for i in range(length - 3):if i > 0 and nums[i] == nums[i - 1]:#排序之后的去重continueif nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target:#判斷最小的和跟目標值的關系breakif nums[i] + nums[length - 3] + nums[length - 2] + nums[length - 1] < target:continue#用最小的與最大的三數和,一次減少循環for j in range(i + 1, length - 2):#最右邊為有指針的位置if j > i + 1 and nums[j] == nums[j - 1]:#去重continueif nums[i] + nums[j] + nums[j + 1] + nums[j + 2] > target:break#同樣是最小的和與目標值比較if nums[i] + nums[j] + nums[length - 2] + nums[length - 1] < target:continueleft, right = j + 1, length - 1while left < right:total = nums[i] + nums[j] + nums[left] + nums[right]if total == target:quadruplets.append([nums[i], nums[j], nums[left], nums[right]])while left < right and nums[left] == nums[left + 1]:left += 1left += 1while left < right and nums[right] == nums[right - 1]:right -= 1right -= 1elif total < target:left += 1else:right -= 1return quadruplets四、刪除鏈表的倒數第N個結點
1、題目描述
?
2、題解
3、源碼?
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:def getLength(head: ListNode) -> int:length = 0while head:length += 1head = head.nextreturn lengthdummy = ListNode(0, head)length = getLength(head)cur = dummyfor i in range(1, length - n + 1):cur = cur.nextcur.next = cur.next.nextreturn dummy.next五、有效括號
1、題目描述
?
2、題解
?
3、源碼
class Solution { public:bool isValid(string s) {stack<int> st;for (int i = 0; i < s.size(); i++) {if (s[i] == '(') st.push(')');else if (s[i] == '{') st.push('}');else if (s[i] == '[') st.push(']');// 第三種情況:遍歷字符串匹配的過程中,棧已經為空了,沒有匹配的字符了,說明右括號沒有找到對應的左括號 return false// 第二種情況:遍歷字符串匹配的過程中,發現棧里沒有我們要匹配的字符。所以return falseelse if (st.empty() || st.top() != s[i]) return false;else st.pop(); // st.top() 與 s[i]相等,棧彈出元素}// 第一種情況:此時我們已經遍歷完了字符串,但是棧不為空,說明有相應的左括號沒有右括號來匹配,所以return false,否則就return truereturn st.empty();} };總結
以上是生活随笔為你收集整理的LeedCode刷题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cloub spring 拦截器_Spr
- 下一篇: 分支和循环结构的应用(习题)