13-机器人的运动轨迹

2020-05-05  本文已影响0人  一方乌鸦

地上有一个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。请问该机器人能够到达多少个格子?

public class Solution {
    boolean[][] visited;
    int rows;
    int cols;
    int count = 0;
    int threshold;
    public int movingCount(int threshold, int rows, int cols) {
        if (rows == 0 || cols == 0) return 0;
        if (threshold == 0) return 1;
        visited = new boolean[rows][cols];
        this.threshold = threshold;
        this.rows = rows;
        this.cols = cols;
        move(0, 0);
        return count;
    }

    private void move(int i, int j) {
        if (i < 0 || j < 0 || i >= rows || j >= cols || visited[i][j]) return;
        if (sum(i, j) <= threshold) {
            count++;
            visited[i][j] = true;
            move(i - 1, j);
            move(i + 1, j);
            move(i, j - 1);
            move(i, j + 1);
        }
    }
    
    private int sum(int i, int j) {
        int sum = 0;
        while(i > 0) {
            sum += i % 10;
            i = i / 10;
        }
        while(j > 0) {
            sum += j % 10;
            j = j / 10;
        }
        return sum;
    }
}
上一篇下一篇

猜你喜欢

热点阅读