Java机器人运动范围 超精简的

机器人的运动范围

http://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8

public class Solution {
    boolean [][]visited;//保证了格子不会重复计数
    public int movingCount(int threshold, int rows, int cols)
    {
        visited = new boolean[rows][cols];//默认是false
        return dfs(threshold,rows,cols,0,0,0,0);//从00开始,位数和为00
    }

    private int dfs(int k, int rows, int cols,int x,int y,int xSum,int ySum){
        //先做边界判断,如果超出边界则这一步可抵达的格子数为0
        if(x>rows-1||y>cols-1) return 0;
        //判断当前格子是否满足要求
        if(xSum+ySum>k||visited[x][y]==true) return 0;
        //如果当前格子满足要求,1+往下走或者往右走可以到达的格子数
        visited[x][y] = true;
        return 1+dfs(k,rows,cols,x+1,y,(x+1)%10==0?xSum-8:xSum+1,ySum)+dfs(k,rows,cols,x,y+1,xSum,(y+1)%10==0?ySum-8:ySum+1);
    }   
}
全部评论
补充:x+1的位数和可以由x推导出,规律: 如果是(19,20)(39,40)这种跨0情况,即a 9,a+1 0这种情况,x+1的位数和=x的位数和-8; 如果是(15,16)(27,28)这种一般情况,x+1的位数和=x的位数和+1 在LeetCode看到大神写的,真的厉害[大拇指]
点赞 回复 分享
发布于 2020-07-24 21:59

相关推荐

投递长鑫存储等公司8个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-04 15:20
牛客61197583...:看到室友一个个没怎么学通过关系直接入职或者接到面试,真的很难受。八股不知道背了多少遍,hot100也刷了1.5遍了,但就是没有面试的机会,唉
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务