我正在用 Rust 做 Leetcode 问题,遇到以下错误:
fn plus_one(digits: &mut Vec<u32>) -> &Vec<u32> {
for i in (0.. digits.len()).rev() {
if digits[i] < 10 {
digits[i] = digits[i] + 1;
break;
}else{
digits[i] = 0;
}
}
if(digits[0] == 0) {
let mut new_digits : Vec<u32> = vec![1];
new_digits.extend(digits). // This is the error
}
digits
}
Run Code Online (Sandbox Code Playgroud)
得到的错误:
--> src/easy/plus_one.rs:13:20
|
13 | new_digits.extend(digits)
| ^^^^^^ the trait `Extend<&mut u32>` is not implemented for `Vec<u32>`
|
= help: the following other types implement trait `Extend<A>`:
<Vec<T, A> as Extend<T>>
<Vec<T, A> as Extend<&'a T>>
Run Code Online (Sandbox Code Playgroud)
有什么问题以及如何解决这个问题?
&mut Vec<u32>
的迭代器产生&mut u32
. Vec
不能从它扩展(&u32
不过它可以从迭代器扩展)。
最简单的修复方法是使用extend_from_slice()
:
fn plus_one(digits: &mut Vec<u32>) -> &Vec<u32> {
for i in (0..digits.len()).rev() {
if digits[i] < 10 {
digits[i] = digits[i] + 1;
break;
} else {
digits[i] = 0;
}
}
if digits[0] == 0 {
let mut new_digits: Vec<u32> = vec![1];
new_digits.extend_from_slice(digits);
}
digits
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
84 次 |
最近记录: |