Python解答力扣网站题库简单版----第三讲
?
1041. 困于環中的機器人
題庫鏈接: 1041. 困于環中的機器人.
題干
在無限的平面上,機器人最初位于 (0, 0) 處,面朝北方。機器人可以接受下列三條指令之一:
- "G":直走 1 個單位
- "L":左轉 90 度
- "R":右轉 90 度
- 機器人按順序執行指令 instructions,并一直重復它們。
只有在平面中存在環使得機器人永遠無法離開時,返回 true。否則,返回 false。
示例
示例 1
輸入:"GGLLGG" 輸出:true 解釋:機器人從 (0,0) 移動到 (0,2),轉 180 度,然后回到 (0,0)。 重復這些指令,機器人將保持在以原點為中心,2 為半徑的環中進行移動。
示例 2
輸入:"GG" 輸出:false 解釋:機器人無限向北移動。
示例3
輸入:"GL" 輸出:true 解釋: 機器人按 (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> ... 進行移動。
提示
- 1 <= instructions.length <= 100
- instructions[i] 在 {'G', 'L', 'R'} 中
思路
- 只要循環一次之后方向不是在向北或一次之后就在原點,
- 那么循環四次或者四次之內之后就可以回到初始位置
- 使用兩個變量記錄點的位置,使用兩個變量記錄機器人的方向。
- 遍歷指令,如果為‘L’, 執行dx, dy = -dy, dx(橫坐標為縱坐標的相反數,縱坐標為橫坐標),如果為‘R’,執行dx, dy = dy, -dx(橫坐標為縱坐標,縱坐標為橫坐標的相反數)。
- 最后只要方向不向北或已經在原點機器人就可以離開。
代碼解析
class Solution(object):def isBoomerang(self, points):""":type points: List[List[int]]:rtype: bool"""A,B,C=pointsreturn (A[0]-B[0])*(B[1]-C[1])-(A[1]-B[1])*(B[0]-C[0])!=0運行結果
237. 刪除鏈表中的節點
題庫鏈接: 237. 刪除鏈表中的節點.
題干
請編寫一個函數,使其可以刪除某個鏈表中給定的(非末尾)節點,你將只被給定要求被刪除的節點。
現有一個鏈表 -- head = [4,5,1,9],它可以表示為:
示例
示例 1
輸入: head = [4,5,1,9], node = 5 輸出: [4,1,9] 解釋: 給定你鏈表中值為 5 的第二個節點,那么在調用了你的函數之后,該鏈表應變為 4 -> 1 -> 9.
示例 2
輸入: head = [4,5,1,9], node = 1 輸出: [4,5,9] 解釋: 給定你鏈表中值為 1 的第三個節點,那么在調用了你的函數之后,該鏈表應變為 4 -> 5 -> 9 .
說明
- 鏈表至少包含兩個節點。
- 鏈表中所有節點的值都是唯一的。
- 給定的節點為非末尾節點并且一定是鏈表中的一個有效節點。
- 不要從你的函數中返回任何結果。
思路:
- 使本節點為刪除節點的下一個點,刪除節點的下一個點為刪除節點的下下一個節點。
代碼解析
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = Noneclass Solution(object):def deleteNode(self, node):""":type node: ListNode:rtype: void Do not return anything, modify node in-place instead."""node.val, node.next = node.next.val, node.next.next運行結果
1. 兩數之和
題庫鏈接: 1. 兩數之和.
題干
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。
示例
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解法1
思路:
- 暴力破解,遍歷每一個元素,并查找是否存在兩個數和為target
代碼解析
class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""for i in range(len(nums)):for k in range(i + 1, len(nums)):if nums[i] + nums[k] == target:return [i, k]break?
運行結果
當然解法一是非常暴力的會消耗很長時間和內存空間,接下來介紹一個更好的解法。
解法2
- 使用一個字典記錄list里面的值和索引,遍歷list,如果target-num在字典里面返回兩個索引值,否則返回None
代碼解析
?
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashmap = {}for index, num in enumerate(nums):another_num = target - numif another_num in hashmap:return [hashmap[another_num], index]hashmap[num] = indexreturn None?
結尾
- 雞湯:人的一生,既不是想象中的那么好,也不是想象中的那么壞。每個人的背后都會有心酸,都會有無法言說的艱難。每個人都會有自己的淚要擦,都會有自己的路要走。
歡迎加入公眾號學習交流,公眾號會分享,爬蟲,數據分析和Python后端等內容。
轉載于:https://www.cnblogs.com/tiandi-fun/p/10887477.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Python解答力扣网站题库简单版----第三讲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剪刀,石头,布,小游戏脚本
- 下一篇: 纯C语言实现链栈