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


    题目描述

    地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
     
    思路:深搜
     1 class Solution {
     2 private:
     3     //计算数位和
     4     int getDigitSum(int i) {
     5         int cnt = 0;
     6         while (i > 0) {
     7             cnt += i % 10;
     8             i /= 10;
     9         }
    10         return cnt;
    11     }
    12     int dfs(int threshold, int i, int j, int rows, int cols, bool *visited) {
    13         int count = 0;
    14         //只有位置符合条件(未访问,以及横纵坐标数位和)才能访问
    15         if (i >= 0 && i < rows && j >= 0 && j < cols && !visited[i * cols + j] 
    16                 && (getDigitSum(i) + getDigitSum(j) <= threshold)) {
    17             visited[i * cols + j] = true;
    18             count = 1;
    19             //上下左右四个方向
    20             int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, -1, 0, 1};
    21             for (int index = 0; index < 4; index++) {
    22                 int newx = i + dx[index], newy = j + dy[index];
    23                 count += dfs(threshold, newx, newy, rows, cols, visited);
    24                 } 
    25         }
    26         return count;
    27     }
    28 public:
    29     int movingCount(int threshold, int rows, int cols)
    30     {
    31         if (threshold < 0 || rows <= 0 || cols <= 0) {
    32             return 0;
    33         }
    34         bool *visited = new bool[rows * cols];
    35         memset(visited, false, rows * cols);
    36         int count = dfs(threshold, 0, 0, rows, cols, visited);
    37         delete [] visited;
    38         return count;
    39     }
    40 };
  • 相关阅读:
    Java中一对多映射关系
    Java中多对多映射关系
    java中的匿名内部类总结
    (自己转)比较ArrayList、LinkedList、Vector
    Statement 接口的应用(存在sql语句的注入风险)
    创建Jutil (单元测试)
    自己(转)抽象类和接口联系与区别
    SQL查询语句
    数据库基础查询语句中的几个细节
    数据库查询语句
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/11239930.html
Copyright © 2020-2023  润新知