美文网首页
机器人的运动范围

机器人的运动范围

作者: Max_7 | 来源:发表于2018-10-03 16:50 被阅读0次

题目描述

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

思路

整体思路就是从(0,0)点开始,向4个方向进行搜索,得出四个方向的运动范围步数,求和得到最后结果。 对于每到达一个方格,要判断是否可以进入这个方格。 对于数位和,可以再另写一个方法,用来每次的计算。整体而言,还是回溯法进行递归搜索。

代码

class Solution:
     def movingCount(self, threshold, rows, cols):
        # 特殊情况判断
        if threshold < 0 or rows <= 0 or cols <= 0:
            return 0
        visited = [[False for i in range(cols)] for j in range(rows)]  # 防止重复进入
        count = self.botmove(threshold, rows, cols, 0, 0, visited)
        return count
     def botmove(self, k, rows, cols, row_index, col_index, visited):
        count = 0 #记录范围
        if self.goodMove(k, rows, cols, row_index, col_index, visited):
            visited[row_index][col_index] = True
            count = 1 + self.botmove(k, rows, cols, row_index + 1, col_index, visited) \
                    + self.botmove(k, rows, cols, row_index - 1, col_index, visited) \
                    + self.botmove(k, rows, cols, row_index, col_index + 1, visited) \
                    + self.botmove(k, rows, cols, row_index, col_index - 1, visited)
            #当前方向再加上四个可移动方向的和
        return count
     def goodMove(self, k, rows, cols, row_index, col_index, visited):
        #判断是否可以移动到当前位置,判断数位和,行列边界,是否访问过
        rowSum = self.digitSum(row_index)
        colSum = self.digitSum(col_index)
        numSum = rowSum + colSum
        #flag = visited[row_index][col_index]
        if row_index >= 0 and row_index < rows and col_index >= 0 and col_index < cols and numSum <= k and visited[row_index][col_index] is False:
            return True
        return False
     def digitSum(self, number):
        ans = 0
        while number > 0:
            ans = ans + number % 10
            number = int(number / 10)
        return ans

相关文章

  • 机器人运动范围

    题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动...

  • 机器人的运动范围

    地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是...

  • 机器人的运动范围

    地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是...

  • 机器人的运动范围

    题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动...

  • 机器人的运动范围

    题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动...

  • 机器人的运动范围

    地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是...

  • 机器人的运动范围

    《剑指offer》面试题13:矩阵中的路径 题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动...

  • 机器人的运动范围

    记忆点 递归 从开始 思路 用递归。目标是从开始,找到所有的可以访问的点,所以理论上矩阵上的每个点最多访问一次。 实现

  • 机器人的运动范围

    题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动...

  • 机器人的运动范围

    题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动...

网友评论

      本文标题:机器人的运动范围

      本文链接:https://www.haomeiwen.com/subject/ljpzoftx.html