免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

豆包 LeetCode 78. 子集 Rust实现

豆包     LeetCode 78. 子集 Rust实现 LeetCode 78. 子集 Rust实现数组元素互不相同返回全部幂集子集。提供回溯DFS、迭代增量、位运算三种写法回溯 DFS推荐rust标准题解rustimpl Solution {pub fn subsets(nums: Vec) - VecVec {let mut res Vec::new();let mut path Vec::new();Self::dfs(0, nums, mut path, mut res);res}fn dfs(start: usize, nums: [i32], path: mut Veci32, res: mut VecVeci32) { res.push(path.clone()); for i in start..nums.len() { path.push(nums[i]); Self::dfs(i 1, nums, path, res); path.pop(); } }}迭代增量法逐个数字复制已有子集并追加当前元素rustimpl Solution {pub fn subsets(nums: Vec) - VecVec {let mut res vec![vec![]];for num in nums {let mut temp Vec::new();for item in res {let mut new_sub item.clone();new_sub.push(num);temp.push(new_sub);}res.extend(temp);}res}}位运算解法总共有 1n 个子集mask每一位标记是否选取下标i元素rustimpl Solution {pub fn subsets(nums: Vec) - VecVec {let n nums.len();let mut res Vec::new();for mask in 0…(1 n) {let mut cur Vec::new();for i in 0…n {if mask (1 i) ! 0 {cur.push(nums[i]);}}res.push(cur);}res}}复杂度时间O(n\cdot 2n)2n个子集每个子集拷贝最多n个元素空间O(n) 回溯栈深度输出集合不计入测试调用rustfn main() {let ans Solution::subsets(vec![1,2,3]);println!(“{:?}”, ans);}如果你需要我直接输出 LeetCode 90 子集II存在重复元素Rust完整代码。
返回列表