是否有更好的方法来使用i
和j
for-in变量,以避免使用std::convert::TryInto
和return vec![i.try_into().unwrap(),j.try_into().unwrap()];
来处理预期结果与这些变量的实际值类型之间的usize和i32转换问题?
使用模块和try_into()
和unwrap()
函数是因为编译器错误提示。但是我想知道是否有另一种方法来强制转换或转换数值。
use std::convert::TryInto;
impl Solution {
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
let mut current = 0;
for i in 0..nums.len() - 1 {
for j in 1..nums.len(){
if j != i {
current = nums[i] + nums[j];
if current == target {
return vec![i.try_into().unwrap(),j.try_into().unwrap()];
}
}
}
}
vec![]
}
}
有i as i32
语法,但是如果nums.len() > i32::MAX
可能会导致静默溢出where i32::MAX = 2_147_483_647
https://doc.rust-lang.org/std/i32/constant.MAX.html
impl Solution {
pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
nums.iter()
.enumerate()
.find_map(|(i, &x)| {
nums.iter()
.enumerate()
.find(|(j, &y)| *j != i && (x + y) == target)
.map(|(j, _)| vec![i as i32, j as i32])
})
.unwrap_or_default()
}
}