面试题67:机器人的运动范围
2015-05-05 17:01
429 查看
题目:地上有一个M行N列的方格,一个机器人从坐标(0,0)的格子开始移动,它每一次可以向上下左右移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子,例如当k为18时,机器人能够进入方格(35,37),因为3+5+7+3=18。但它不能进入方格(35,38),因为3+5+3+8=19。请问机器人能够到达多少个格子?
from:
https://github.com/zhedahht/ChineseCodingInterviewAppendix/tree/master/RobotMove
#include <stdio.h> int getDigitSum(int number) { int sum = 0; while(number > 0) { sum += number % 10; number /= 10; } return sum; } bool check(int threshold, int rows, int cols, int row, int col, bool* visited) { if(row >=0 && row < rows && col >= 0 && col < cols && getDigitSum(row) + getDigitSum(col) <= threshold && !visited[row* cols + col]) return true; return false; } int movingCountCore(int threshold, int rows, int cols, int row, int col, bool* visited) { int count = 0; if(check(threshold, rows, cols, row, col, visited)) { visited[row * cols + col] = true; count = 1 + movingCountCore(threshold, rows, cols, row - 1, col, visited) + movingCountCore(threshold, rows, cols, row, col - 1, visited) + movingCountCore(threshold, rows, cols, row + 1, col, visited) + movingCountCore(threshold, rows, cols, row, col + 1, visited); } return count; } int movingCount(int threshold, int rows, int cols) { bool *visited = new bool[rows * cols]; for(int i = 0; i < rows * cols; ++i) visited[i] = false; int count = movingCountCore(threshold, rows, cols, 0, 0, visited); delete[] visited; return count; }
from:
https://github.com/zhedahht/ChineseCodingInterviewAppendix/tree/master/RobotMove
相关文章推荐
- 【剑指Offer学习】【面试题67:机器人的运动范围】
- 《剑指Offer》学习笔记--面试题67:机器人的运动范围
- 剑指offer--面试题67:机器人的运动范围
- 剑指offer面试题67:机器人的运动范围
- 面试题67:机器人的运动范围
- 【剑指Offer】面试题67:机器人的运动范围
- 剑指offer-面试题67-机器人的运动范围
- 面试题67. 机器人的运动范围
- 面试题67:机器人的运动范围
- 面试题67 机器人的运动范围
- 《剑指offer》面试题67 机器人的运动范围
- 剑指Offer面试题67:机器人的运动范围 Java实现
- 面试题:机器人的运动范围
- 【剑指offer】面试题13:机器人的运动范围
- 剑指offer 67题 【回溯法】机器人的运动范围
- 面试题74:机器人的运动范围
- 67:机器人的运动范围
- 剑指offer 67-机器人的运动范围
- 《剑指offer》:[67]机器人的运动范围
- 面试题目67(机器人的运动范围)