update leetcode
This commit is contained in:
		| @@ -4,6 +4,6 @@ version = "0.1.0" | ||||
| edition = "2021" | ||||
|  | ||||
| [workspace] | ||||
| members = [ "problems/*"] | ||||
| members = ["problems/*"] | ||||
|  | ||||
| [dependencies] | ||||
| [workspace.dependencies] | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								leetcode_rs/main
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								leetcode_rs/main
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										6
									
								
								leetcode_rs/problems/p118/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p118/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p118" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										27
									
								
								leetcode_rs/problems/p118/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								leetcode_rs/problems/p118/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| fn generate(num_rows: i32) -> Vec<Vec<i32>> { | ||||
|     let mut rows: Vec<Vec<i32>> = Vec::new(); | ||||
|     let num_rows = num_rows as usize; | ||||
|     for i in 0..num_rows { | ||||
|         let mut row: Vec<i32> = Vec::new(); | ||||
|         row.push(1); | ||||
|  | ||||
|         if i > 1 { | ||||
|             for j in 1..i { | ||||
|                 let k = rows[i - 1][j - 1] + rows[i - 1][j]; | ||||
|                 row.push(k); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if i != 0 { | ||||
|             row.push(1); | ||||
|         } | ||||
|  | ||||
|         rows.push(row); | ||||
|     } | ||||
|  | ||||
|     rows | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     dbg!(generate(5)); | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p125/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p125/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p125" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										18
									
								
								leetcode_rs/problems/p125/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								leetcode_rs/problems/p125/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| fn is_palindrome(s: String) -> bool { | ||||
|     if s.is_empty() { | ||||
|         return true; | ||||
|     } | ||||
|     let s: String = s | ||||
|         .chars() | ||||
|         .filter(|c| c.is_alphabetic() || c.is_ascii_digit()) | ||||
|         .map(|c| c.to_ascii_lowercase()) | ||||
|         .collect(); | ||||
|  | ||||
|     let rev_s: String = s.chars().rev().collect(); | ||||
|     s == rev_s | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     dbg!(is_palindrome("A man, a plan, a canal: Panama".to_string())); | ||||
|     dbg!(is_palindrome("0P".to_string())); | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p136/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p136/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p136" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										11
									
								
								leetcode_rs/problems/p136/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								leetcode_rs/problems/p136/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| fn single_number(nums: Vec<i32>) -> i32 { | ||||
|     let mut buffer = 0; | ||||
|     for num in nums { | ||||
|         buffer ^= num; | ||||
|     } | ||||
|     buffer | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     dbg!(single_number([2, 2, 1].to_vec())); | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p17/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p17/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p17" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										45
									
								
								leetcode_rs/problems/p17/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								leetcode_rs/problems/p17/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| fn letter_combinations(digits: String) -> Vec<String> { | ||||
|     if digits.is_empty() { | ||||
|         return vec![]; | ||||
|     } | ||||
|     let alpha_set: Vec<Vec<char>> = vec![ | ||||
|         vec![],                   // 0 | ||||
|         vec![],                   // 1 | ||||
|         vec!['a', 'b', 'c'],      // 2 | ||||
|         vec!['d', 'e', 'f'],      // 3 | ||||
|         vec!['g', 'h', 'i'],      // 4 | ||||
|         vec!['j', 'k', 'l'],      // 5 | ||||
|         vec!['m', 'n', 'o'],      // 6 | ||||
|         vec!['p', 'q', 'r', 's'], // 7 | ||||
|         vec!['t', 'u', 'v'],      // 8 | ||||
|         vec!['w', 'x', 'y', 'z'], // 9 | ||||
|     ]; | ||||
|  | ||||
|     let mut candidate_alpha = Vec::new(); | ||||
|     for digit in digits.chars() { | ||||
|         let digit = digit.to_digit(10).unwrap() as usize; | ||||
|         candidate_alpha.push(alpha_set[digit].clone()); | ||||
|     } | ||||
|  | ||||
|     let total_len: usize = candidate_alpha.iter().map(|x| x.len()).product(); | ||||
|     let mut result: Vec<String> = vec![String::new(); total_len]; | ||||
|  | ||||
|     for (idx, combination) in result.iter_mut().enumerate() { | ||||
|         let mut temp_idx = idx; | ||||
|         for chars in candidate_alpha.iter().rev() { | ||||
|             let char_idx = temp_idx % chars.len(); | ||||
|             combination.push(chars[char_idx]); | ||||
|             temp_idx /= chars.len(); | ||||
|         } | ||||
|         combination | ||||
|             .chars() | ||||
|             .rev() | ||||
|             .collect::<String>() | ||||
|             .clone_into(combination); | ||||
|     } | ||||
|  | ||||
|     result | ||||
| } | ||||
| fn main() { | ||||
|     dbg!(letter_combinations("234".to_string())); | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p190/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p190/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p190" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p190/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p190/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| fn reverse_bits(n: i32) -> i32 { | ||||
|     n.reverse_bits() | ||||
| } | ||||
| fn main() { | ||||
|     assert_eq!(reverse_bits(43261596), 964176192) | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p191/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p191/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p191" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										7
									
								
								leetcode_rs/problems/p191/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								leetcode_rs/problems/p191/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| fn hamming_weight(n: i32) -> i32 { | ||||
|     n.count_ones() as i32 | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     assert_eq!(hamming_weight(11), 3); | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p2/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p2/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p2" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										101
									
								
								leetcode_rs/problems/p2/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								leetcode_rs/problems/p2/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| // Definition for singly-linked list. | ||||
| #[derive(PartialEq, Eq, Clone, Debug)] | ||||
| pub struct ListNode { | ||||
|     pub val: i32, | ||||
|     pub next: Option<Box<ListNode>>, | ||||
| } | ||||
|  | ||||
| impl ListNode { | ||||
|     #[inline] | ||||
|     fn new(val: i32) -> Self { | ||||
|         ListNode { next: None, val } | ||||
|     } | ||||
| } | ||||
|  | ||||
| fn add_two_numbers(l1: Option<Box<ListNode>>, l2: Option<Box<ListNode>>) -> Option<Box<ListNode>> { | ||||
|     let mut dummy_head = Box::new(ListNode::new(0)); | ||||
|     let mut current = &mut dummy_head; | ||||
|     let mut p1 = l1.as_ref(); | ||||
|     let mut p2 = l2.as_ref(); | ||||
|     let mut carry = 0; | ||||
|  | ||||
|     while p1.is_some() || p2.is_some() || carry != 0 { | ||||
|         let val1 = p1.map_or(0, |node| node.val); | ||||
|         let val2 = p2.map_or(0, |node| node.val); | ||||
|         let sum = val1 + val2 + carry; | ||||
|  | ||||
|         carry = sum / 10; | ||||
|         current.next = Some(Box::new(ListNode::new(sum % 10))); | ||||
|         current = current.next.as_mut().unwrap(); | ||||
|  | ||||
|         p1 = p1.and_then(|node| node.next.as_ref()); | ||||
|         p2 = p2.and_then(|node| node.next.as_ref()); | ||||
|     } | ||||
|  | ||||
|     dummy_head.next | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     // 测试用例 1: 342 + 465 = 807 | ||||
|     let l1 = Some(Box::new(ListNode { | ||||
|         val: 2, | ||||
|         next: Some(Box::new(ListNode { | ||||
|             val: 4, | ||||
|             next: Some(Box::new(ListNode { val: 3, next: None })), | ||||
|         })), | ||||
|     })); | ||||
|     let l2 = Some(Box::new(ListNode { | ||||
|         val: 5, | ||||
|         next: Some(Box::new(ListNode { | ||||
|             val: 6, | ||||
|             next: Some(Box::new(ListNode { val: 4, next: None })), | ||||
|         })), | ||||
|     })); | ||||
|     let result = add_two_numbers(l1, l2); | ||||
|     println!("Test 1: {:?}", result); // 期望: [7, 0, 8] | ||||
|  | ||||
|     // 测试用例 2: 0 + 0 = 0 | ||||
|     let l1 = Some(Box::new(ListNode::new(0))); | ||||
|     let l2 = Some(Box::new(ListNode::new(0))); | ||||
|     let result = add_two_numbers(l1, l2); | ||||
|     println!("Test 2: {:?}", result); // 期望: [0] | ||||
|  | ||||
|     // 测试用例 3: 99 + 9 = 108 (有进位) | ||||
|     let l1 = Some(Box::new(ListNode { | ||||
|         val: 9, | ||||
|         next: Some(Box::new(ListNode { val: 9, next: None })), | ||||
|     })); | ||||
|     let l2 = Some(Box::new(ListNode::new(9))); | ||||
|     let result = add_two_numbers(l1, l2); | ||||
|     println!("Test 3: {:?}", result); // 期望: [8, 0, 1] | ||||
|  | ||||
|     // 测试用例 4: 999 + 1 = 1000 (多位进位) | ||||
|     let l1 = Some(Box::new(ListNode { | ||||
|         val: 9, | ||||
|         next: Some(Box::new(ListNode { | ||||
|             val: 9, | ||||
|             next: Some(Box::new(ListNode { val: 9, next: None })), | ||||
|         })), | ||||
|     })); | ||||
|     let l2 = Some(Box::new(ListNode::new(1))); | ||||
|     let result = add_two_numbers(l1, l2); | ||||
|     println!("Test 4: {:?}", result); // 期望: [0, 0, 0, 1] | ||||
|  | ||||
|     // 测试用例 5: 长度不同的链表 12 + 9999 = 10011 | ||||
|     let l1 = Some(Box::new(ListNode { | ||||
|         val: 2, | ||||
|         next: Some(Box::new(ListNode { val: 1, next: None })), | ||||
|     })); | ||||
|     let l2 = Some(Box::new(ListNode { | ||||
|         val: 9, | ||||
|         next: Some(Box::new(ListNode { | ||||
|             val: 9, | ||||
|             next: Some(Box::new(ListNode { | ||||
|                 val: 9, | ||||
|                 next: Some(Box::new(ListNode { val: 9, next: None })), | ||||
|             })), | ||||
|         })), | ||||
|     })); | ||||
|     let result = add_two_numbers(l1, l2); | ||||
|     println!("Test 5: {:?}", result); // 期望: [1, 1, 0, 0, 1] | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p283/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p283/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p283" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										12
									
								
								leetcode_rs/problems/p283/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								leetcode_rs/problems/p283/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| fn move_zeroes(nums: &mut Vec<i32>) { | ||||
|     let non_zero: Vec<i32> = nums.iter().filter(|&x| *x != 0).cloned().collect(); | ||||
|     let zero_count = nums.len() - non_zero.len(); | ||||
|     *nums = non_zero; | ||||
|     nums.extend(vec![0; zero_count]); | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     let mut result = vec![0, 1, 0, 3, 12]; | ||||
|     move_zeroes(&mut result); | ||||
|     assert_eq!(result, [1, 3, 12, 0, 0].to_vec()); | ||||
| } | ||||
							
								
								
									
										6
									
								
								leetcode_rs/problems/p50/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								leetcode_rs/problems/p50/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| [package] | ||||
| name = "p50" | ||||
| version = "0.1.0" | ||||
| edition = "2024" | ||||
|  | ||||
| [dependencies] | ||||
							
								
								
									
										7
									
								
								leetcode_rs/problems/p50/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								leetcode_rs/problems/p50/src/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| fn my_pow(x: f64, n: i32) -> f64 { | ||||
|     x.powi(n) | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
|     assert_eq!(my_pow(2.0, 10), 1024.0) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user