leetcode-面试题13-机器人的运动范围

 题目描述:

 

 方法一:dfs/bfs

class Solution:
    def movingCount(self, m: int, n: int, k: int) -> int:
        def digitsum(n):
            ans = 0
            while n:
                ans += n %10
                n//=10
            return ans
        from queue import Queue
        q = Queue()
        q.put((0,0))
        s = set()
        while not q.empty():
            x,y = q.get()
            if (x,y) not in s and 0 <=x <m and 0<=y<n and digitsum(x)+digitsum(y) <=k:
                s.add((x,y))
                for nx,ny in [(x+1,y),(x,y+1)]:
                    q.put((nx,ny))
        return len(s)

方法二:递推

class Solution:
    def movingCount(self, m: int, n: int, k: int) -> int:
        def digitsum(n):
            ans = 0
            while n:
                ans += n %10
                n//=10
            return ans
        vis = set([(0,0)])
        for i in range(m):
            for j in range(n):
                if ((i-1,j) in vis or (i,j-1) in vis) and digitsum(i) + digitsum(j) <= k:
                    vis.add((i,j))
        return len(vis)

 

posted @ 2020-04-08 23:28  oldby  阅读(188)  评论(0编辑  收藏  举报