# 0489. Robot Room Cleaner
###### tags: `Leetcode` `Hard` `DFS`
Link: https://leetcode.com/problems/robot-room-cleaner/description/
## 思路
难点在于机器人是第一视角 所以我们需要手动从机器人的角度实现dfs(旋转 找下一个方向)
如果现在机器人的方向是朝北 我们希望机器人走到东边的一个格子 就需要先```turnRight()```然后再```move()```
接着我们需要旋转180度再往前走回到原来的格子 下一个方向是朝南 因此我们需要先再转180度 让机器人朝东 接着循环刚才的动作先```turnRight()```再```move()```
## Code
```java=
class Solution {
public void cleanRoom(Robot robot) {
Set<String> set = new HashSet<>();
set.add("0,0");
dfs(0, 0, 0, set, robot);
}
private void dfs(int x, int y, int curDir, Set<String> set, Robot robot){
robot.clean();
int[][] dirs = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
for(int i=1; i<=4; i++){
robot.turnRight();
int nextDir = (i+curDir)%4;
int nextx = x+dirs[nextDir][0];
int nexty = y+dirs[nextDir][1];
if(!set.contains(nextx+","+nexty) && robot.move()){
set.add(nextx+","+nexty);
dfs(nextx, nexty, (curDir+i)%4, set, robot);
robot.turnLeft();
robot.turnLeft();
robot.move();
robot.turnLeft();
robot.turnLeft();
}
}
}
}
```