力扣題解 簡單難度

2022-05-15 08:08:59 字數 3878 閱讀 4597

不定時更新

給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

你可以按任意順序返回答案。

我的解答:

時間複雜度為o(n^2)

def twosum(self, nums: list[int], target: int) -> list[int]:

dic =

for i in dic:

res = target-dic[i]

for k in dic:

if res == dic[k] and k!=i:

return i,k

#解題中遇到的問題:

1. list.index()如果列表中有相同元素,也只返回的第乙個元素的索引

2. enumerate()返回乙個生成器,如果用兩層迴圈去迴圈同乙個生成器,那麼內層迴圈不會從第乙個元素開始

3. 不能用列表的值做字典的key,除非你知道如何處理相同key值得覆蓋問題

優質解答:

def twosum(self, nums, target):

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

特點: 我的思路是用第乙個數找第二個數,本答案思路是由第二個數找第乙個數,乙個集合中的元素內部有關係時都可以用此方法降低求解難度.

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉

我的解答:

def reverse(self, x: int) -> int:

_x = list(str(abs(x)))

_x.reverse() #這裡沒有必要用列表的reverse,還要拼接回來的,字串和列表都可以用[::-1]反轉

num = int("".join(_x))

tag = 2**31

if x>0 and num <=tag-1:

return num

elif x <0 and num <=tag:

return -num

else:

return 0

優質解答:

def reverse(self, x: int) -> int:

a = str(x) if x>0 else str(-x)+'-'

a = int(a[::-1])

return a if a <= 2**31-1 and a >= -2**31-1 else 0

判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

我的解答:

def ispalindrome(self, x: int) -> bool:

if x>=0:

_x = str(x)

_x = int(_x[::-1])

if x == _x:

return true

return false

優質解答:

def ispalindrome(self, x: int) -> bool:

return true if str(x) == str(x)[::-1] else false

#解析:字串也能比是否相等,先轉成字串反轉再轉int比較多此一舉

例如, 羅馬數字 2 寫做 ii ,即為兩個並列的 1。12 寫做 xii ,即為 x + ii 。 27 寫做 xxvii, 即為 xx + v + ii 。

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 iiii,而是 iv。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 ix。這個特殊的規則只適用於以下六種情況:

i 可以放在 v (5) 和 x (10) 的左邊,來表示 4 和 9。

x 可以放在 l (50) 和 c (100) 的左邊,來表示 40 和 90。

c 可以放在 d (500) 和 m (1000) 的左邊,來表示 400 和 900。

給定乙個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。

我的解答:一遍過

def romantoint(self, s: str) -> int:

dic =

res = 0

i = 0

while i 編寫乙個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""。

我的答案:

def longestcommonprefix(self, strs: list[str]) -> str:

if not strs or '' in strs :

return ''

if len(strs) == 1:

return strs[0]

res =

for i in range(len(strs[0])):

s = strs[0][0:i+1]

for item in strs:

if not item.startswith(s):

break

else: #**走到這說明上面的迴圈是正常結束的

continue #這個continue是用來控制外層迴圈的,跳過下面的**break直接進入下次迴圈

break #如果內層迴圈是正常結束的這個break永遠都不會執行

if res:

return res[-1]

return ''

#暴力求解雙迴圈的控制,內層迴圈結束整個迴圈結束rhe控制

優質答案:

def longestcommonprefix(strs) :

res = ""

r = zip(*strs)

print(r)

for tmp in zip(*strs):

tmp_set = set(tmp)

if len(tmp_set) == 1:

res += tmp[0]

else:

break

return res

#1.zip函式的特點,zip可以打包多個物件,迴圈zip物件得到元組

我的解答:超過了98.8%的python

def isvalid(self, s: str) -> bool:

dic = ','[':']'}

lifo =

for i in range(len(s)):

if not lifo:

else:

try:

if not dic[lifo[-1]] == s[i]:

else:

lifo.pop()

except:

return false

return false if lifo else true

能配對的話一定是一左配一右,按這個規律存入字典裡

迴圈字串,不匹配就加到列表裡,能匹配就刪除列表的最後乙個元素

迴圈結束後列表內沒有元素就返回true

如果出現右括號在前,字典內沒有這個key,就直接報錯

力扣 389 找不同 難度 簡單

題目 給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。示例 1 輸入 s abcd t abcde 輸出 e 解釋 e 是那個被新增的字母。示例 2 輸入 s t y 輸出 y 示例 3 輸入 s a t aa ...

力扣題解v

題目 刪除鍊錶的倒數第n個節點 給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.思路1.首先,把鍊錶放入到列表中,然後,del 函式刪除倒數第n個節點,然後,在把列表還原成鍊錶。...

LeetCode簡單難度題解 二

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。題解 迴圈陣列 從後往前找,當匹配到第乙個比目標值小的那個元素下標的時候 返回下標 1就是目標值要插入的位置,如果有正好匹配的值 直接返回下標 publ...