You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免在循环索引中使用try_into().unwrap()进行类型转换?

Rust中usize转i32的替代方案(针对two_sum场景)

在LeetCode的two_sum问题里,数组索引默认是usize类型,但题目要求返回i32类型的索引,你当前用的try_into().unwrap()是安全但略显繁琐的写法,这里给你几个更合适的替代方案:

1. 直接用as强制转换(算法题首选)

LeetCode的测试用例中,数组长度永远不会超过i32的最大值(i32能表示的最大正数是2147483647,而题目里nums的长度最多也就几万级别),所以直接用as转换完全安全,代码更简洁:

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        for i in 0..nums.len() {
            // 优化j的起始位置,避免重复检查j!=i,提升效率
            for j in (i + 1)..nums.len() {
                if nums[i] + nums[j] == target {
                    return vec![i as i32, j as i32];
                }
            }
        }
        vec![]
    }
}

2. 用expect()替代unwrap(),提供明确错误信息

如果想保留类型安全的检查,同时避免unwrap()模糊的panic信息,可以用expect()自定义错误提示,调试时更容易定位问题:

use std::convert::TryInto;

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        for i in 0..nums.len() {
            for j in (i + 1)..nums.len() {
                if nums[i] + nums[j] == target {
                    return vec![
                        i.try_into().expect("索引转换失败:数组长度超过i32可表示范围"),
                        j.try_into().expect("索引转换失败:数组长度超过i32可表示范围")
                    ];
                }
            }
        }
        vec![]
    }
}

3. 提前校验数组长度(严谨生产环境写法)

如果是在生产环境中,不确定数组长度是否会超出i32范围,可以先做一次校验,再安全转换:

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        // 提前检查数组长度是否超出i32范围
        if nums.len() > i32::MAX as usize {
            panic!("数组长度超过i32可表示的最大范围");
        }
        for i in 0..nums.len() {
            for j in (i + 1)..nums.len() {
                if nums[i] + nums[j] == target {
                    return vec![i as i32, j as i32];
                }
            }
        }
        vec![]
    }
}

另外提一句:你原代码里的双层循环可以优化,让j从i+1开始,这样就不用每次判断j!=i,能少做很多无用的检查。

内容的提问来源于stack exchange,提问作者Alex Alvarez Gárciga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:25:24