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

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务