剑指offer-机器人的运动范围
来源:互联网 发布:手机图文转换软件 编辑:程序博客网 时间:2024/06/05 15:16
问题
题目:[剑指offer-机器人的运动范围]
思路
dfs+剪枝的常见思路。
注意,这个题是常规题目,上一道题目不太常规是因为它回溯之后,要恢复visited的未被访问的状态!!!
其实,正常的题目是不需要的。
忘了说的是,刚上来其实我是想直接数格子。但是数格子的问题是,有些格子合法但是你到不了!
比如,threshold = 9. (18, 0)合法,但是(19,0)不合法,到不了。但是(20,0)合法,此时也到不了。
代码
class Solution {public: int movingCount(int threshold, int rows, int cols) { int cnt = 0; vector<vector<int>> visited( rows, vector<int>(cols, 0) ); dfs( rows, cols, 0, 0, visited, threshold, cnt ); return cnt; }private: void dfs(int rows, int cols, int i, int j, vector<vector<int>>& visited, int threshold, int& cnt){ if( i < 0 || i == rows || j < 0 || j == cols || visited[i][j] ) return; visited[i][j]=1; int sum = sum_digits(i) + sum_digits(j); if( sum <= threshold ){ cnt++; dfs( rows, cols, i-1, j, visited, threshold, cnt ); dfs( rows, cols, i+1, j, visited, threshold, cnt ); dfs( rows, cols, i, j-1, visited, threshold, cnt ); dfs( rows, cols, i, j+1, visited, threshold, cnt ); } } int sum_digits(int val){ stringstream ss; ss << val; string tmp; ss >> tmp; int sz = tmp.size(); int ans = 0; for(int i = 0; i < sz; ++i){ ans += (tmp[i] - '0'); } return ans; }};
阅读全文
0 0
- 剑指offer--机器人的运动范围
- 剑指offer 67-机器人的运动范围
- 《剑指offer》机器人的运动范围
- 剑指offer—机器人的运动范围
- 剑指offer 66 机器人的运动范围
- [剑指offer]机器人的运动范围
- 《剑指offer》:[67]机器人的运动范围
- 剑指offer-机器人的运动范围
- 剑指offer-机器人的运动范围
- 剑指offer 机器人的运动范围
- 剑指Offer:机器人的运动范围
- 剑指offer-机器人的运动范围
- 剑指offer-----机器人的运动范围 java
- 剑指offer 机器人的运动范围
- 机器人运动范围--《剑指offer》
- 剑指offer--机器人运动范围
- 【剑指Offer学习】【面试题67:机器人的运动范围】
- 剑指offer系列之六十五:机器人的运动范围
- CAD.net 创建面板
- 自定义view--刻度尺rulerview
- 最重要的AI资源都在这里(大牛,研究机构,视频,博客,书籍,Quora......)
- DMA机制(基于S3C6410)
- 多人合作开发的标准制定
- 剑指offer-机器人的运动范围
- SQL Server 客户端连接的问题
- 典型例题
- cmd里面的标识?
- SIFT算法学习总结
- POJ1300 欧拉回路 解题报告
- js ---str转utf8与utf-8转str
- 推荐系统评测指标—精准率(Precision)、召回率(Recall)、F值(F-Measure)
- 并查集小练