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); } }