求助|剑指offer第13题:机器人的运动范围
1261
2020.03.13
发布于 未知归属地

剑指offer的第13题,求大佬帮忙看看!
思路:从(0,0)出发,往右走或往下走,每走一步k=k-1;如果遇到坐标为个位数为9的话,k=k+8;直到K=0且个位数不为9,结束。
运行总是出错,但想不出是哪里的问题,希望大佬可以帮忙看看!感谢。

class Solution {
public:
    int helper(int& m, int& n, int k,int i,int j,vector<int>& table)
    {
        if(i==m||j==n) return 0;
        if(table[i*n+j]==1) return 0;
        else table[i*n+j]=1;
        if(k==0&&(i+1)%10!=0&&(j+1)%10!=0) 
        {
            table[i*n+j]=1;
            return 1;
        }
        //--k;
        //return helper(m,n,k,i,j+1,table)+helper(m,n,k,i+1,j,table)+1;
        //if(table[i*n+j]==1) return 0;
        //else table[i*n+j]=1;
        int res;
        if((i+1)%10==0&&(j+1)%10==0)
             res=helper(m,n,k+8,i,j+1,table)+helper(m,n,k+8,i+1,j,table)+1;
        else if((i+1)%10==0&&(j+1)%10!=0)
            res=helper(m,n,k-1,i,j+1,table)+helper(m,n,k+8,i+1,j,table)+1;
        else if((i+1)%10!=0&&(j+1)%10==0)
            res=helper(m,n,k+8,i,j+1,table)+helper(m,n,k-1,i+1,j,table)+1;
        else
            res=helper(m,n,k-1,i,j+1,table)+helper(m,n,k-1,i+1,j,table)+1;
        return res;
    }
    int movingCount(int m, int n, int k) {
        if(m<=0||n<=0) return 0;
        if(k==0) return 1;
        vector<int> table(m*n);
        return helper(m,n,k,0,0,table);
    }
};
评论 (1)