题目来自: https://leetcode.com/problems/perfect-squares/
这是我的答案:
class Solution(object):
def numSquares(self, n):
"""
:type n: int
:rtype: int
"""
result = [0]
if len(result) <= n:
square = [s**2 for s in xrange(1, int(math.sqrt(n))+1)]
for i in xrange(len(result), n+1):
best = min(1 + result[i-sqr] for sqr in square if sqr <= i)
result.append(best)
return result[n]
运行超时
这是抄来的答案:
class Solution(object):
result = [0]
def numSquares(self, n):
"""
:type n: int
:rtype: int
"""
if len(self.result) <= n:
square = [s**2 for s in xrange(1, int(math.sqrt(n))+1)]
for i in xrange(len(self.result), n+1):
best = min(1 + self.result[i-sqr] for sqr in square if sqr <= i)
self.result.append(best)
return self.result[n]
160ms...
我仔细想了一下,因为这道题的 test 有 600 个之多,而且一般都是递增的,这个答案的办法因为把 DP 的缓存放在了那个 solution object 里面,所以后面的 test 可以 reuse 那个 array 。不知道这个办法在 interview 里是否可行?感觉这是赖皮的...
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.