- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/robot-bounded-in-circle/
Onan infinite plane, a robot initially stands at (0, 0)
and faces north
. The robot can receive one of three instructions:
Therobot performs the instructions given in order, and repeats them forever.
Return true
if and only if there exists a circle in the plane such that the robot never leaves the circle.
Example 1:
Input: "GGLLGG"
Output: true
Explanation:
The robot moves from (0,0) to (0,2), turns 180 degrees, and then returns to (0,0).
When repeating these instructions, the robot remains in the circle of radius 2 centered at the origin.
Example 2:
Input: "GG"
Output: false
Explanation:
The robot moves north indefinitely.
Example 3:
Input: "GL"
Output: true
Explanation:
The robot moves from (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> ...
Note:
1、 1<=instructions.length<=100;
2、 instructions[i]isin{'G','L','R'}
;
机器人初始位置在原点,面向北。接受到一串指令,G代表直走1步;L代表左转;R代表右转。指令会无限的循环下去。问是否会有一个圆,把机器人的路径包括?
我们一定知道,这个题不能用暴力解法。机器人的路径最终被圆包括的充分条件是机器在一些指令之后回到原点。由于指令是循环的,题目只给出了部分指令。那么对于该部分指令的要求是,机器人回到了原点
或者不再原点且不面向北
。
回到原点很好理解,那么不再原点且不面向北
是什么意思呢?
如果题目中的指令结束之后,机器人不在原点,那么说明它相对原点移动了一个向量v。机器人在指令结束后的位置成为了新的原点,题目说机器人的初始状态时是面向北的,那么如果在新的原点上仍然面向北,那么一定还会继续向第一次一样相对新的原点移动相同的向量v,此时机器人距原点的向量是2v。
那么为什么不面向北就一定能回到原点呢?这是由于在新的原点新的方向上再次接受相同指令后,机器人移动新向量的长度为|向量v|、方向和v成90度或者180度;多次指令的结果叠加就会抵消第一次移动的v。
Python代码如下:
class Solution(object):
def isRobotBounded(self, instructions):
"""
:type instructions: str
:rtype: bool
"""
dirs = [(0, 1), (-1, 0), (0, -1), (1, 0)]
x, y = 0, 0
curd = 0
for i in instructions:
if i == "G":
x += dirs[curd][0]
y += dirs[curd % 4][1]
elif i == "L":
curd = (curd + 1) % 4
elif i == "R":
curd = (curd - 1) % 4
return (x == 0 and y == 0) or curd != 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
从上面的说明中我们看出来,如果要把第一次的向量v进行抵消,那么指令最多重复4次即可。即该机器人的路径能不能形成圆的充分必要条件是该指令重复4次后机器人能回到原点。
class Solution(object):
def isRobotBounded(self, instructions):
"""
:type instructions: str
:rtype: bool
"""
dirs = [(0, 1), (-1, 0), (0, -1), (1, 0)]
x, y = 0, 0
curd = 0
for i in instructions * 4:
if i == "G":
x += dirs[curd][0]
y += dirs[curd % 4][1]
elif i == "L":
curd = (curd + 1) % 4
elif i == "R":
curd = (curd - 1) % 4
return x == 0 and y == 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
参考资料: https://leetcode.com/problems/robot-bounded-in-circle/discuss/304977/1041.-C-Solution-Beats-100-Runtime-and-100-Memory-(with-explanation)
2022
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
我把圆圈旋转了180度,我怎样才能让内圈粘在上面(不旋转它) 最佳答案 试试这个代码。我创建了我的 HTML 代码。您的类(class)只需更改即可。 CSS: .outer-circle{
我正在制作一个圆圈到圆圈的碰撞检测程序。我可以让球四处移动,但是当检测到碰撞时,球重叠得很远。有什么建议么?提前致谢! import javax.swing.*; import java.awt.*;
这是圆类: public class Circle { private double radius; private double x; private double y; }
我正在制作一个 HTML Canvas 演示,以了解有关圆到圆碰撞检测和响应的更多信息。我相信检测代码是正确的,但响应数学并不完全正确。 该演示是使用 TypeScript 实现的,它是 JavaSc
所以我想在 CSS 中找出一个反圆/切出的圆。目前我找到 this answer 由 ScottS . 他的代码非常适合我,现在我正在寻找相同的效果,但在 的另一边元素。因此,我需要在右侧切出而不是
我目前正尝试在 C++ 中创建一个 Circle 类,但是当我编译时,我收到一条错误消息,提示“重载的‘Circle’调用不明确。我是 C++ 的新手,不确定这意味着什么。我一直在使用在这里可以找到一
在我的 wip 游戏中,我必须实现 Circle-Circle 碰撞。为了实现这一点,我只需计算它们的中心 (x1-x2)² + (y1-y2)² 之间的平方距离。如果它小于它们的平方半径 (r1+r
我必须画一个倒数计时器圆圈,我正在使用 this open source图书馆。要求是圆圈充满绿色并在 x 秒内消失。我已经给回圆圈绿色并在其上画了一个白色圆圈,绿色圆圈看起来正在消失。 self.c
我有一个 UIView,我将其背景设为圆形: self.colourView.layer.cornerRadius = 350 self.colourView.clipsToBounds = tr
引用: http://tympanus.net/Development/IconHoverEffects/#set-7 当您滑过上面链接中的任何圆圈图标时,它会以曲线形式淡化(我相信这是弹出的圆圈后面
我想创建一个形状,我将其描述为“反圆”: 图片有点不准确,因为黑线应该沿着 div 元素的外边界继续。 这是我目前拥有的演示:http://jsfiddle.net/n9fTF/ 没有图像的 CSS
我可以将文本添加到我的草图中,但如果我可以将文本直接附加到圆圈上,我会希望它。这意味着如果一个圆圈被另一个圆圈覆盖,文本也会被覆盖。在更高的层面上不是,我发现 d3 模型很难以某种方式构造对象,使它们
我正在展示用 Python 的 Turtle 模块绘制的孙子图案,他要求看同心圆。我认为使用 turtle 的 circle() 会更快画他们而不是编写自己的代码来生成圆。哈!我被困住了。我看到所产生
我正在创建一个使用 map 的网络应用程序。在 map 上我正在创建圆圈并希望在 div 中显示半径。通过覆盖完成事件完成半径后,我能够显示半径。但我想在创建圆时显示 div 中的半径,以允许用户以自
编辑:我可以用半径除以 Angular 吗? 问题:为了学习 HTML5 Canvas 中的碰撞艺术,我目前正在尝试让整圆与分段圆(在本例中为半圆)发生碰撞。 我尝试过的:我的第一个想法是一个简单的圆
我发现了其他标题相似的话题,但在这些话题中找不到适合我的解决方案。 我试图通过将相等的宽度/高度与 border-radius:50% 相结合来生成完美圆形的输入标签,但边缘出现像素化。我已经为宽度/
我使用 Google Maps V3 API 创建了一个圆,还尝试制作了一个具有相同半径的标记圆。 问题:我创建的是倾斜的,而谷歌地图创建的是一个漂亮的圆圈。出了什么问题? Google map V3
这是我一直在处理的图像 目标是检测大圆圈内的小圆圈。 目前我所做的是将图像转换为灰度并应用阈值(cv2.THRESH_OTSU),从而产生此图像 在此之后,我使用我在stackoverflow上找到的
我正在尝试绘制一张图片,并且绘制了一个矩形,然后我想绘制一个弧形元素,但是这个元素必须是精确的,并且它只是矩形之外的圆的一部分形状。因此,我尝试使用 Arc patch 来创建相同的东西,但形状不匹配
我必须检测 javaFX 程序中两个“球”何时发生碰撞。每次单击按钮时,都会将一个新球添加到 Pane 中。我知道 getChildren() 返回一个可观察列表,其中包含每个球的节点,当我打印带有两
我是一名优秀的程序员,十分优秀!