Day5 skip
Q242
[Q242]用array作哈希表
# Way1
def isAnagram(self, s: str, t: str) -> bool:
record = [0] * 26
for i in s:
# 并不需要记住字符的ASCII, 只需要求出一个相对数值就可以了
record[ord(i) - ord("a")] += 1
for i in t:
record[ord(i) - ord("a")] -= 1
for i in range(26):
if record[i] != 0:
# record数组如果有得元素不为0,说明字符串s和t一定是谁多了字符或者谁少了字符
return False
# record数组所有元素都为零0,说明字符串s和t是字母异位词
return True
# Way2: defaultdict
def isAnagram(self, s: str, t: str) -> bool:
from collections import defaultdict
s_dict = defaultdict(int)
t_dict = defaultdict(int)
for i in s:
s_dict[i] += 1
for i in t:
t_dict[i] += 1
return s_dict == t_dict
# Way3: Counter
def isAnagram(self, s: str, t: str) -> bool:
from collections import Counter
s_count = Counter(s)
t_count = Counter(t)
return s_tount == t_count
Q349
[Q349]用set作哈希表
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
val_dict = {}
ans = []
for num in nums1:
val_dict[num] = 1
for num in nums2:
if num in val_dict.keys() and val_dict[num] == 1:
ans.append(num)
val_dict[num]=0
return ans
Q202
[Q202]
def isHappy(self, n: int) -> bool:
def calculate_happy(num):
sum_ = 0
while num: # 从个位开始依次取平方,再求和
sum_ += (num%10)**2
num = num // 10
return sum_
record = set() # 记录中间结果
while True:
n = calculate_happy(n)
if n==1:
return True
if n in record:
return False # 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数ù
else:
record.add(n)
// Set()
var getSum = function (n) {
let sum = 0;
while (n) {
sum += (n % 10) ** 2;
n = Math.floor(n/10);
}
return sum;
}
var isHappy = function(n) {
let set = new Set(); // Set() 里的数是惟一的
// 如果在循环中某个值重复出现,说明此时陷入死循环,也就说明这个值不是快乐数
while (n !== 1 && !set.has(n)) {
set.add(n);
n = getSum(n);
}
return n === 1;
};
// Set(),求和用reduce
var isHappy = function(n) {
let set = new Set();
let totalCount;
while(totalCount !== 1) {
let arr = (''+(totalCount || n)).split('');
totalCount = arr.reduce((total, num) => {
return total + num * num
}, 0)
if (set.has(totalCount)) {
return false;
}
set.add(totalCount);
}
return true;
};
Q1
[Q1]用map作哈希表
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: # 遍历当前元素,并在map中寻找是否有匹配的key
return [records[target- value], index]
records[value] = index # 遍历当前元素,并在map中寻找是否有匹配的key
return []
Reference from: https://programmercarl.com/