https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/

  1. //DFS 递归
  2. //使用visited数组保存已访问的地址
  3. class Solution {
  4. boolean [][] visited;
  5. public int movingCount(int m, int n, int k) {
  6. int res = 0;
  7. int i = 0, j= 0;
  8. visited = new boolean[m][n];
  9. return DFS(i,j,m,n,k);
  10. }
  11. int DFS(int i, int j, int m, int n, int k){
  12. if( i < 0 || j< 0 || i >=m || j >= n ||visited[i][j] == true) return 0;
  13. if((sum(i) + sum(j)) > k) return 0;
  14. visited[i][j] = true;
  15. return 1+DFS(i+1,j,m,n,k)+DFS(i,j+1,m,n,k);
  16. }
  17. boolean judge(int i, int j, int k){
  18. if((sum(i)+sum(j) )> k) return false;
  19. else return true;
  20. }
  21. int sum(int num){
  22. int res = 0;
  23. while(num >0){
  24. res += num % 10;
  25. num /= 10;
  26. }
  27. return res;
  28. }
  29. }

错误代码

  1. class Solution {
  2. public int movingCount(int m, int n, int k) {
  3. int res = 0;
  4. for(int i = 0; i < m; i++){
  5. for(int j = 0; j < n; j++){
  6. if(judge(i,j,k) == true) {
  7. ++res;
  8. System.out.println("i="+i+" j="+j);
  9. }
  10. }
  11. }
  12. return res;
  13. }
  14. boolean judge(int i, int j, int k){
  15. if((sum(i)+sum(j) )> k) return false;
  16. else return true;
  17. }
  18. int sum(int num){
  19. int res = 0;
  20. while(num >0){
  21. res += num % 10;
  22. num /= 10;
  23. }
  24. return res;
  25. }
  26. }
输入 16 8 4
错误原因(10, 0)等点是不可到达的
执行结果
i=0 j=0
i=0 j=1
i=0 j=2
i=0 j=3
i=0 j=4
i=1 j=0
i=1 j=1
i=1 j=2
i=1 j=3
i=2 j=0
i=2 j=1
i=2 j=2
i=3 j=0
i=3 j=1
i=4 j=0
i=10 j=0
i=10 j=1
i=10 j=2
i=10 j=3
i=11 j=0
i=11 j=1
i=11 j=2
i=12 j=0
i=12 j=1
i=13 j=0
25