題目簡(jiǎn)介
242.有效的字母異位詞 https://leetcode.cn/problems/valid-anagram/description/
給定兩個(gè)字符串 s 和 t ,編寫一個(gè)函數(shù)來判斷 t 是否是 s 的字母異位詞常挚。
注意:若 s 和 t 中每個(gè)字符出現(xiàn)的次數(shù)都相同闷祥,則稱 s 和 t 互為字母異位詞薛躬。
349. 兩個(gè)數(shù)組的交集 https://leetcode.cn/problems/intersection-of-two-arrays/description/
給定兩個(gè)數(shù)組 nums1 和 nums2 潮罪,返回 它們的交集 挚躯。輸出結(jié)果中的每個(gè)元素一定是 唯一 的片林。我們可以 不考慮輸出結(jié)果的順序 譬涡。
202. 快樂數(shù) https://leetcode.cn/problems/happy-number/description/
編寫一個(gè)算法來判斷一個(gè)數(shù) n 是不是快樂數(shù)。
「快樂數(shù)」 定義為:
對(duì)于一個(gè)正整數(shù)鸯绿,每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和跋破。
然后重復(fù)這個(gè)過程直到這個(gè)數(shù)變?yōu)?1,也可能是 無限循環(huán) 但始終變不到 1瓶蝴。
如果這個(gè)過程 結(jié)果為 1毒返,那么這個(gè)數(shù)就是快樂數(shù)。
如果 n 是 快樂數(shù) 就返回 true 舷手;不是拧簸,則返回 false 。
1. 兩數(shù)之和 https://leetcode.cn/problems/two-sum/description/
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target男窟,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個(gè) 整數(shù)盆赤,并返回它們的數(shù)組下標(biāo)贾富。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是牺六,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)颤枪。
你可以按任意順序返回答案。
初見思路
242: 可以用Python原生Counter亂殺, Python可導(dǎo)包先整Counter淑际,dict的區(qū)別僅在于性能
from collections import Counter
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
return Counter(s) == Counter(t)
349: 再上一個(gè)原生包亂殺解法
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
202: 這道題本身更偏數(shù)學(xué)規(guī)律而不是哈希表畏纲,以下是我以前的解:
class Solution:
def isHappy(self, n: int) -> bool:
def get_power_sum(num) -> int:
total_sum = 0
while num > 0:
num,digit = divmod(num, 10)
total_sum += digit ** 2
return total_sum
slow_run = n
fast_run = get_power_sum(n)
while slow_run!=fast_run and fast_run != 1:
slow_run = get_power_sum(slow_run)
fast_run = get_power_sum(get_power_sum(fast_run))
return fast_run == 1
注意題眼,可能會(huì)死循環(huán)春缕,那么需要檢測(cè)循環(huán)的方法:要么記錄歷史平方和盗胀,看是否重復(fù);要么遵循鏈表一樣的快慢指針法邏輯锄贼,有環(huán)跳出票灰。另一個(gè)核心是Python自帶的divmod
方法,可以方便的返回商和余數(shù)精簡(jiǎn)代碼宅荤。
1: 這道題已經(jīng)做過太多遍屑迂,就不廢話了,已經(jīng)是代碼界的abandon了膘侮。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
residual = target - nums[i]
if residual in nums[i+1:]:
return [i,nums[i+1:].index(residual)+i+1]
return [-1,-1]
這個(gè)是Python的一種解屈糊,可能不算很直觀,但是很簡(jiǎn)練琼了;以下是標(biāo)準(zhǔn)的哈希表的解法:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
records = dict()
for index, value in enumerate(nums):
if target - value in records:
return [records[target- value], index]
records[value] = index
return [-1,-1]
復(fù)盤思路
https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html
https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html
https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html
重點(diǎn)難點(diǎn)
(待復(fù)盤)
今日收獲
- 哈希表的基本使用方法
- 一些Python亂殺哈希表問題的嘯技巧??