机器人的运动范围
    题目链接:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/
    图片.png

    思路:典型的回溯问题,需要考虑的点是满足数位和的格子呈什么样的分布特征?脑补一下函数图像,可以想到大概是一些三角形的形状,此处给出lc题解中的图:
    图片.png
    画出这幅图之后可以得到一个结论,即机器人可以只通过向下和向右运动到达所有可以到达的格子,因此回溯时也只需考虑这两个方向。

    参考代码:

    1. class Solution {
    2. public:
    3. int movingCount(int m, int n, int k) {
    4. vector<vector<bool>> visited(m, vector<bool>(n, false));
    5. return search(m, n, k, 0, 0, visited);
    6. }
    7. int search(int m, int n, int k, int x, int y, vector<vector<bool>>& visited) {
    8. if (bitSum(x) + bitSum(y) > k || x >= m || y >= n || visited[x][y]) {
    9. return 0;
    10. }
    11. visited[x][y] = true;
    12. return 1 + search(m, n, k, x + 1, y, visited) + search(m, n, k, x, y + 1, visited);
    13. }
    14. int bitSum(int num) {
    15. int sum = 0;
    16. while (num != 0) {
    17. sum += num % 10;
    18. num /= 10;
    19. }
    20. return sum;
    21. }
    22. };