如何避免try_into().unwrap()转换与循环索引?



是否有更好的方法来使用ij for-in变量,以避免使用std::convert::TryIntoreturn 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()
    }
}

最新更新