我试着在向量切片上使用迭代器,但它就是不起作用。
我的代码如下
pub fn three_sum(nums: Vec<i32>) -> Vec<Vec<i32>> {
let mut res: Vec<Vec<i32>> = Vec::new();
for (n1, &i1) in nums.iter().enumerate() {
for (n2, &i2) in nums[(n1 + 1)..].iter().enumerate() {
for (n3, &i3) in nums[(n2 + 1)..].iter().enumerate() {
if i1 + i2 + i3 == 0 {
res.push(Vec::from([i1, i2, i3]));
}
}
}
}
return res;
}
我期望n2循环在n1到n1结束的nums中循环,但它只是从开始循环,而不管n1是什么。
n3上也发生了同样的情况。
我是否正确地使用了迭代器和切片?
2条答案
按热度按时间pbpqsu0x1#
正如你在文档中看到的,enumerate只计算迭代的次数,如果你想跳过迭代器的前
n
元素,你应该使用skip
函数来代替,它也能更清楚地表达你的意图。但是,请注意
enumerate
和skip
的顺序:这样你就可以先构造一个枚举迭代器,然后跳过一些元素,这样你的索引也会“从”n
开始。相反,你可以先跳过元素,然后从0开始计数。1hdlvixo2#
enumerate
无法知道您要从何处开始计数,因此它始终从0开始。如果您要从其他数字开始计数,可以使用带范围的zip
。