剑指offer——机器人的运动范围

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

解题思路:

自己做递归的题就是不行,记住这个题吧,日狗了。

 1 public class Solution {
 2     public int movingCount(int threshold, int rows, int cols)
 3     {
 4         int [][] flag= new int [rows][cols];
 5         return moving(threshold,rows,cols,flag,0,0);
 6     }
 7     
 8     public int moving(int threshold, int rows,int cols,int [][]flag,int i,int j)
 9     {
10         if(threshold<=0||i>=rows || j >= cols || i<0 || j< 0 || flag[i][j]==1|| sum(i)+sum(j)>threshold)
11         {
12             return 0;
13         }
14         
15         flag[i][j]=1;
16         
17         return moving(threshold,rows,cols,flag,i-1,j)
18             +moving(threshold,rows,cols,flag,i,j-1)
19             +moving(threshold,rows,cols,flag,i+1,j)
20             +moving(threshold,rows,cols,flag,i,j+1)
21             +1;
22     }
23     public int sum(int number)
24     {
25         if(number==0) return number;
26         int summary=0;
27         while(number>0)
28         {
29             summary=summary+number%10;
30             number = number/10;
31         }
32         return summary;
33     }
34 }
原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10896509.html