力扣題目彙總 1.兩數之和 1.題目描述 給定一個整數數組 和一個目標值 ,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,你不能重覆利用這個數組中同樣的元素。 示例: 2.解答 2.迴文數 1題目描述 示例 1: 示例 2: 示例 3 ...
力扣題目彙總
1.兩數之和
1.題目描述
給定一個整數數組 nums
和一個目標值 target
,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重覆利用這個數組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
2.解答
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
import copy
new_list = []
for v in range(len(nums)):
new_list_1=copy.copy(nums) #這裡一開始用了深拷貝,後面深拷貝太費時間了換淺拷貝
del new_list_1[v] #這裡COPY和DEL是為了每次進入迴圈刪除進入迴圈的那個字
if (target - nums[v]) in new_list_1:
new_list.append(v)
return(new_list)
2.迴文數
1題目描述
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文數。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個迴文數。
2.解答
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if str(x)[::-1] == str(x)[:]:
return True #跟著描述走,沒碰到什麼問題
else:
return False
3.猜數字大小
1.題目描述
我們正在玩一個猜數字游戲。 游戲規則如下:
我從 1 到 n 選擇一個數字。 你需要猜我選擇了哪個數字。
每次你猜錯了,我會告訴你這個數字是大了還是小了。
你調用一個預先定義好的介面 guess(int num)
,它會返回 3 個可能的結果(-1
,1
或 0
):
-1 : 我的數字比較小
1 : 我的數字比較大
0 : 恭喜!你猜對了!
示例 :
輸入: n = 10, pick = 6
輸出: 6
2.解答
start = 1
mx = n
while start <= mx:
mid = start + (mx - start) // 2
z = guess(mid)
if z == 1:
start = mid + 1
elif z == -1:
mx = mid -1
else:
return mid
'''主要是理解上面那個
-1 : 我的數字比較小
1 : 我的數字比較大
0 : 恭喜!你猜對了!
'''
#理解反了,這是網上查的中中間開始可以減少時間,一開始從頭開始迴圈時間超了
4.1比特與2比特字元
1.題目描述
有兩種特殊字元。第一種字元可以用一比特0
來表示。第二種字元可以用兩比特(10
或 11
)來表示。
現給一個由若幹比特組成的字元串。問最後一個字元是否必定為一個一比特字元。給定的字元串總是由0結束。
示例 1:
輸入:
bits = [1, 0, 0]
輸出: True
解釋:
唯一的編碼方式是一個兩比特字元和一個一比特字元。所以最後一個字元是一比特字元。
示例 2:
輸入:
bits = [1, 1, 1, 0]
輸出: False
解釋:
唯一的編碼方式是兩比特字元和兩比特字元。所以最後一個字元不是一比特字元。
2.解答
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
i = -2
s = -len(bits)
while i >= s and bits[i]:
i -= 1
return i % 2 == 0
# 怎麼出來忘了