機器人能否返回原點
1.題目描述
在二維平面上,有一個機器人從原點 (0, 0) 開始。給出它的移動順序,判斷這個機器人在完成移動后是否在 (0, 0) 處結束。
移動順序由字符串表示。字符 move[i] 表示其第 i 次移動。機器人的有效動作有 R
(右),L
(左),U
(上)和 D
(下)。如果機器人在完成所有動作后返回原點,則返回 true。否則,返回 false。
注意:機器人“面朝”的方向無關緊要。 “R” 將始終使機器人向右移動一次,“L” 將始終向左移動等。此外,假設每次移動機器人的移動幅度相同。
示例 1:
輸入: "UD"
輸出: true
解釋:機器人向上移動一次,然后向下移動一次。所有動作都具有相同的幅度,因此它最終回到它開始的原點。因此,我們返回 true。
示例 2:
輸入: "LL"
輸出: false
解釋:機器人向左移動兩次。它最終位於原點的左側,距原點有兩次 “移動” 的距離。我們返回 false,因為它在移動結束時沒有返回原點。
2.解題思路
#思路一
把水平和垂直分開用兩個值代表,LR代表水平加減,UD代表垂直方向加減
#思路二(再思路一上進行改進)
LR字符串存在的個數相同和UD字符串存在的個數相同 及返回原點
3.解題
#思路一解答
class Solution:
def judgeCircle(self, moves: str) -> bool:
level = 0
level_list = ['R','L']
vertical = 0
vertical_list = ['U','D']
for a in moves:
if a =='R':
level += 1
elif a=='L':
level -=1
elif a =='U':
vertical += 1
elif a == 'D':
vertical -= 1
if level == 0 and vertical ==0:
return True
else:
return False
#思路二解答
class Solution(object):
def judgeCircle(self, moves):
"""
:type moves: str
:rtype: bool
"""
if moves.count('D') == moves.count('U') and moves.count('L') == moves.count('R'):
return True
else:
return False
按奇偶排序數組
1.題目描述
給定一個非負整數數組 A
,返回一個數組,在該數組中, A
的所有偶數元素之后跟着所有奇數元素。
你可以返回滿足此條件的任何數組作為答案。
示例:
輸入:[3,1,2,4]
輸出:[2,4,3,1]
輸出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也會被接受。
提示:
1 <= A.length <= 5000
0 <= A[i] <= 5000
2.解題思路
利用偶數特效%2余0然后進行對調位置
3.解題
class Solution:
def sortArrayByParity(self, A: List[int]) -> List[int]:
i = 0
for j in range(len(A)):
if A[j] % 2 == 0:
A[i], A[j] = A[j], A[i]
i += 1
return A
數字的補數
1.題目描述
給定一個正整數,輸出它的補數。補數是對該數的二進制表示取反。
注意:
- 給定的整數保證在32位帶符號整數的范圍內。
- 你可以假定二進制數不包含前導零位。
示例 1:
輸入: 5
輸出: 2
解釋: 5的二進制表示為101(沒有前導零位),其補數為010。所以你需要輸出2。
示例 2:
輸入: 1
輸出: 0
解釋: 1的二進制表示為1(沒有前導零位),其補數為0。所以你需要輸出0。
2.解題思路
按照題目描述走,先變成二進制,然后去除前倒數,再01兌換,再二進制變成整型
3.解題
class Solution:
def findComplement(self, num: int) -> int:
num = bin(num)
num = num[2:]
new_num = ''
for a in num:
if a == '0':
new_num += '1'
else:
new_num += '0'
return int(new_num,2)