欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python解答力扣网站题库简单版----第三讲

程序员文章站 2022-03-31 12:41:27
1041. 困于环中的机器人 题库链接: 1041. 困于环中的机器人. 题干 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。机器人可以接受下列三条指令之一: "G":直走 1 个单位 "L":左转 90 度 "R":右转 90 度 机器人按顺序执行指令 instructions,并一 ......

 

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=points
        return (a[0]-b[0])*(b[1]-c[1])-(a[1]-b[1])*(b[0]-c[0])!=0

运行结果

Python解答力扣网站题库简单版----第三讲

237. 删除链表中的节点

题库链接: .

题干

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

现有一个链表 -- head = [4,5,1,9],它可以表示为:

Python解答力扣网站题库简单版----第三讲

示例

示例 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 = none

class 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


运行结果

Python解答力扣网站题库简单版----第三讲

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

 

运行结果

Python解答力扣网站题库简单版----第三讲

当然解法一是非常暴力的会消耗很长时间和内存空间,接下来介绍一个更好的解法。

解法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 - num
            if another_num in hashmap:
                return [hashmap[another_num], index]
            hashmap[num] = index
        return none

 

结尾

  • 鸡汤:人的一生,既不是想象中的那么好,也不是想象中的那么坏。每个人的背后都会有心酸,都会有无法言说的艰难。每个人都会有自己的泪要擦,都会有自己的路要走。

欢迎加入公众号学习交流,公众号会分享,爬虫,数据分析和python后端等内容。

Python解答力扣网站题库简单版----第三讲