20250206 finished.
This commit is contained in:
		@@ -472,3 +472,5 @@ mod p680_valid_palindrome_ii;
 | 
				
			|||||||
mod p922_sort_array_by_parity_ii;
 | 
					mod p922_sort_array_by_parity_ii;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod p90_subsets_ii;
 | 
					mod p90_subsets_ii;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mod p47_permutations_ii;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										62
									
								
								src/problem/p47_permutations_ii.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/problem/p47_permutations_ii.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * [47] Permutations II
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					pub struct Solution {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// submission codes start here
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Solution {
 | 
				
			||||||
 | 
					    pub fn permute_unique(mut nums: Vec<i32>) -> Vec<Vec<i32>> {
 | 
				
			||||||
 | 
					        nums.sort_unstable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let mut result = vec![];
 | 
				
			||||||
 | 
					        let mut visited = vec![false; nums.len()];
 | 
				
			||||||
 | 
					        let mut path = Vec::with_capacity(nums.len());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Self::search(&nums, 0, &mut path, &mut visited, &mut result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        result
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn search(
 | 
				
			||||||
 | 
					        nums: &Vec<i32>,
 | 
				
			||||||
 | 
					        pos: usize,
 | 
				
			||||||
 | 
					        path: &mut Vec<i32>,
 | 
				
			||||||
 | 
					        visited: &mut Vec<bool>,
 | 
				
			||||||
 | 
					        result: &mut Vec<Vec<i32>>,
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					        if pos == nums.len() {
 | 
				
			||||||
 | 
					            result.push(path.clone());
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for i in 0..nums.len() {
 | 
				
			||||||
 | 
					            if visited[i] || (i > 0 && nums[i - 1] == nums[i] && !visited[i - 1]) {
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            visited[i] = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            path.push(nums[i]);
 | 
				
			||||||
 | 
					            Self::search(nums, pos + 1, path, visited, result);
 | 
				
			||||||
 | 
					            path.pop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            visited[i] = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// submission codes end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod tests {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn test_47() {
 | 
				
			||||||
 | 
					        assert_eq!(
 | 
				
			||||||
 | 
					            vec![vec![1, 1, 2], vec![1, 2, 1], vec![2, 1, 1]],
 | 
				
			||||||
 | 
					            Solution::permute_unique(vec![1, 1, 2])
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user