Robot Move
题目地址:
http://www.1point3acres.com/bbs/thread-283570-1-1.html
题目:
题目是一个机器人在一个空间里面,不知道大小形状,也不知道初始位置。空间里有障碍物, 有一个move function, 如果前面是障碍物的话,会return false, 不是return true. 求所以可以达到位置的面积。Note: move 是真的move, 就算是障碍物也会move到那里,但是会return false。follow up 是怎么在dfs基础上再缩减call move的次数
解题思路:
这道题就是dfs然后加上两个set来存储路径和障碍物。
代码:
http://www.1point3acres.com/bbs/thread-283570-1-1.html
题目:
题目是一个机器人在一个空间里面,不知道大小形状,也不知道初始位置。空间里有障碍物, 有一个move function, 如果前面是障碍物的话,会return false, 不是return true. 求所以可以达到位置的面积。Note: move 是真的move, 就算是障碍物也会move到那里,但是会return false。follow up 是怎么在dfs基础上再缩减call move的次数
解题思路:
这道题就是dfs然后加上两个set来存储路径和障碍物。
代码:
public int Solution() { Set<String> visit = new HashSet<>(); Set<String> obs = new HashSet<>(); //障碍物 visit.add(encode(0, 0)); dfs(0, 0, visit, obs); return visit.size(); } public void dfs(int i, int j, Set<String> visit, Set<String> obs) { int[][] dict = new int[][]{{0, 1}, {0, -1}, {-1, 0}, {1, 0}}; for (int k = 0; k < 4; k++) { int next_i = dict[k][0] + i; int next_j = dict[k][1] + j; String str = encode(next_i, next_j); if (obs.contains(str) || visit.contains(str)) continue; if (move(k)) { //move success, will move to next pos and return true. visit.add(str) dfs(next_i, next_j, visit, obs); } else { obs.add(str); } //move() return true / false, always goes to next_i, next_j, so need to move back even move return false; move(moveBack(k)); } } public String encode(int i, int j) { return i + ',' + j; } public void moveBack(int k) { if (k % 2 != 0) { return k - 1; } return k + 1; }

Comments
Post a Comment