谷歌面经
第五面:这一面理解题意花了大概20分钟时间,感觉面试官也觉得不太爽了,大概问题就是,给定一个机器人,然后机器人容许一些列操作, void clean() 清空当前单元格,turnLeft(k) turnRight(k) 向左转k次,向右转k次,move()从当前方向移动到下一个单元格,给定一个机器人,让机器人去清理整个房间,采用dfs的算法,关键是如何表示每个单元格,最后给出了正确的思路,然后写了下代码,然后我检查了一遍,没检查出bug,因为没有多少时间了,面试官也没有说什么,也没告诉我有bug,就让我检查一遍,走路上想起来了一个bug,在用Set去重的时候,忘记了调用set.add()方法,卧槽了,所以这个代码是有bug的,啊,要疯啊,要是因为这个挂了我就真的想死了
void turnLeft(int k); void turnRight(int k); void move(); void clean(); #0,1,2,3-->east,south,west,north. void cleanHouse(vector<vector<int>>&room) { int m = room.size(); int n = room[0].size(); int startX = 0; int startY = 0; vector<vector<bool>> visited(m, vector<bool>(n)); dis(startX,startY,room, visited,0); } void dis(int startX,int startY,vector<vector<int>>&room, vector<vector<bool>> visited, int dir) { vector<vector<int>> dirs = {{1,0},{0,1},{-1,0},{0,-1}}; pair<int,int>currDir = dirs[dir]; visited[startX][startY] = true; while(startX+currDir.first>=0 && startX+currDir.first<m && startY+currDir.second >=0 && startY+currDir.second<n && room[startX+currDir.first][startX+currDir.second]!=2) { if(room[startX+currDir.first][startX+currDir.second]==1)
{
clean(); room[startX+currDir.first][startX+currDir.second] = 0; }
startX+=currDir.first; startY+=currDir.second; move(); } startX = startX - currDir.first; startY = startY-currDir.second;
int k = rand()%4; int nextDir = turnLeft(k); dfs(startX,startY,room,visited,nextDir);
k = rand()%4; nextDir = turnRight(k); dfs(startX,startY,room,visited,nextDir); }