Skip to main content
Back to problems
#2061
Medium Algorithms

Number of spaces cleaning robot cleaned

Array Matrix Simulation
62.6% acceptance
Mar 31, 2026
130
29

No description available.

Solution

Rust
Time O(n * m)
Space O(n * m)
LeetCode
solution.rs
impl Solution {
  pub fn number_of_clean_rooms(room: Vec<Vec<i32>>) -> i32 {
    let m = room.len();
    let n = room[0].len();
    // directions: right, down, left, up
    let dr = [0i32, 1, 0, -1];
    let dc = [1i32, 0, -1, 0];
    let mut visited = vec![vec![[false; 4]; n]; m];
    let mut cleaned = vec![vec![false; n]; m];
    let mut r = 0usize;
    let mut c = 0usize;
    let mut d = 0usize;
    let mut count = 0;

    loop {
      if visited[r][c][d] {
        return count;
      }
      visited[r][c][d] = true;
      if !cleaned[r][c] {
        cleaned[r][c] = true;
        count += 1;
      }
      let nr = r as i32 + dr[d];
      let nc = c as i32 + dc[d];
      if nr >= 0 && nr < m as i32 && nc >= 0 && nc < n as i32 && room[nr as usize][nc as usize] == 0 {
        r = nr as usize;
        c = nc as usize;
      } else {
        d = (d + 1) % 4;
      }
    }
  }
}