一、题目内容

image.png

二、题解

解法1:

类似矩阵中的路径

思路

image.png

代码

  1. class Solution {
  2. /**
  3. * DFS + 剪枝
  4. *
  5. * @param m
  6. * @param n
  7. * @param k
  8. * @return
  9. */
  10. public int movingCount(int m, int n, int k) {
  11. boolean[][] visited = new boolean[m][n];
  12. int i = 0, j = 0;
  13. return moving(visited, k, i, j, m, n);
  14. }
  15. public int moving(boolean[][] visited, int k, int i, int j, int m, int n) {
  16. int count = 0;
  17. //剪枝
  18. if (i < 0 || j < 0 || i >= m || j >= n || (getDigitSum(i) + getDigitSum(j) > k) || visited[i][j]) {
  19. return count;
  20. }
  21. //标记已访问
  22. visited[i][j] = true;
  23. return 1 +
  24. moving(visited, k, i + 1, j, m, n) +
  25. moving(visited, k, i - 1, j, m, n) +
  26. moving(visited, k, i, j + 1, m, n) +
  27. moving(visited, k, i, j - 1, m, n);
  28. }
  29. /**
  30. * 求数位和
  31. *
  32. * @param x
  33. * @return
  34. */
  35. public int getDigitSum(int x) {
  36. int sum = 0;
  37. while (x > 0) {
  38. sum += x % 10;
  39. x /= 10;
  40. }
  41. return sum;
  42. }
  43. }