本题其实不需要用列表或者字典即可,只需要求一个数,浪费存储
最开始还很蠢用了列表,大的数据会爆内存
解法:一个简单深搜即可
在评论区看到一个更好的解法,因为奇数分为n+1和n-1,所以以4来分类,找规律,直接连搜索都不用,时间空间都很节省。
class Solution:
def integerReplacement(self, n: int) -> int:
dic = {}
def dfs(num):
if num == 1:
dic[1] = 0
return 0
if num in dic.keys():
return dic[num]
if num % 2 == 0:
dic[num] = dfs(int(num / 2)) + 1
if num % 2 == 1:
dic[num] = min(dfs(num + 1), dfs(num - 1)) + 1
return dic[num]
return dfs(n)
if __name__ == "__main__":
print(Solution.integerReplacement("", 200000000))

博客讨论了LeetCode题的解法,指出最初用列表解题会因大的数据爆内存,实际上本题无需列表或字典,用简单深搜即可。此外,评论区有一种更好的解法,根据奇数分为n+1和n - 1,以4分类找规律,无需搜索,节省时间和空间。
516

被折叠的 条评论
为什么被折叠?



