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

相关推荐

不愿透露姓名的神秘牛友
昨天 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司10个岗位
点赞 评论 收藏
分享
10-30 19:23
已编辑
山东大学(威海) C++
牛至超人:我了个雷 1.实习经历写太长了吧,精简一点,你写那么老多,面试官看着都烦 2.项目经历你放俩竞赛干啥单独拿出来写上几等奖就行了呗 3.一大雷点就是项目经历里的那个课程设计,大家都知道课程设计巨水,不要写课程设计,换一个名字,就叫学生管理系统,面试官问就说是自己做的项目,不要提课程设计的事 4.那个交流经历,简化一下塞到最上面的教育经历里就行了 5.简历尽量一页纸
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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