题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移 动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐 标的数位之和大于k的格子。请问该机器人能够达到多少个格子?
思路:利用递归实现,每次只能走上下左右四个点,进行判断点的位置是否越 界,点数之和是否大于K,是否已经走过了。
//机器人的运动范围
package Function;
//(35,37)3+5+3+7=18 18(行)
public class movingCount13 {
public int movingCount(int threshold, int rows, int cols) {
int flag[][] = new int[rows][cols];// 记 录 是 否 已 经 走 过
return helper(0, 0, rows, cols, flag, threshold);
}
private int helper(int i, int j, int rows, int cols, int[][] flag, int threshold) {
//进行判断点的位置是否越界,点数之和是否大于K,是否已经走过了。
if (i < 0 || i >= rows || j < 0 || j >= cols ||
numSum(i) + numSum(j) > threshold ||
flag[i][j] == 1)
return 0;
flag[i][j] = 1;
//上下左右
return helper(i - 1, j, rows, cols, flag, threshold) +
helper(i + 1, j, rows, cols, flag, threshold) +
helper(i, j - 1, rows, cols, flag, threshold) +
helper(i, j + 1, rows, cols, flag, threshold) + 1;
//+1算上当前点
}
private int numSum(int i) {
int sum = 0;
while (i > 0) {
sum += i % 10;
i = i / 10;
}
return sum;
}
public static void main(String[] args) {
movingCount13 p=new movingCount13();
int a=4;
int m=p.movingCount(a,1,15);
System.out.println(m);
}
}
来源:CSDN
作者:LuckyAsYou
链接:https://blog.csdn.net/qq_36113761/article/details/104600841