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

Posted yangbocsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题13. 机器人的运动范围相关的知识,希望对你有一定的参考价值。

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

一、题目

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

二、参考代码

class Solution 
    public int movingCount(int m, int n, int k) 
        int[][] nums = new int[m][n];
        int t = 0;
        // 构造二维数组
        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++)
                 t = 0;
                int a = i;
                int b = j;
                while(a != 0)
                    t += a%10;
                    a = a/10;
                
                while(b != 0)
                    t += b%10;
                    b = b/10;
                
                // 模拟岛屿那题目,构造二维数组
                if(t <= k)
                    nums[i][j] = 1;
                else
                    nums[i][j] = 0;
                  
            
        
        return dfs(nums,0,0);   //因为是从(0,0)开始,数连续陆地个数
    
    public int dfs(int[][] nums,int i ,int j)
        int m = nums.length;
        int n = nums[0].length;
        if(i < 0 || j < 0 || i >= m || j >= n)
            return 0;
        
        if(nums[i][j] == 0)
            return 0;
        
        nums[i][j] = 0;
        return 1
                + dfs(nums,i-1,j)
                + dfs(nums,i+1,j)
                + dfs(nums,i,j-1)
                + dfs(nums,i,j+1);
    


以上是关于面试题13. 机器人的运动范围的主要内容,如果未能解决你的问题,请参考以下文章

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

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

leetcode 剑指 Offer 13. 机器人的运动范围

剑指 Offer 13. 机器人的运动范围

剑指offer13机器人运动的范围

剑指offer: JZ13 机器人的运动范围