本文最后更新于 115 天前,其中的信息可能已经有所发展或是发生改变。
控制链基础使用
原题
用数组中两个数值(不能重复)相加得到与target相同的值并返回下标
//力扣 两数之和 数组nums中两数之和值为target 返回两数下标
struct Solution;
impl Solution {
pub fn two_sum(nums:Vec<i32>,target:i32)-> Vec<i32>{
//补充逻辑
}
}
fn main(){
let nums= vec![1,2,3];
let target = 5;
let result = Solution::two_sum(nums, target);
print!("{:?}",result)
}
解题思路
首先分析题目,用数组中两个数值(不能重复)相加得到与target相同的值并返回下标,所以我们需要遍历整个数组,需要两个值,所以二层嵌套,数组末尾下标我们可以用num.len()求长度来获得 nums[end] end =nums.len-1,不过这里长度类型为usize,不可以与i32相减 不过rust的for i,in 0…num中,取0但不取num,所以我们不需要对长度处理
let len = nums.len(); //len类型为usize 下文中确保i,j转换为usize,
for i in 0..len {
for j in (i+1)..len {
}
}
这样我们就可以让数组中所有值两两相加且不会重复,接着我们来写判断
if nums[i]+nums[j]==target{
return vec![i as i32,j as i32]; //这里我们需要注意上文嵌套中我们使用了usize的数组长度,所以i,j也统一为usize类型,在这里我们需要返回值类型为i32所以需要as转换类型
}
vec![] //若无解(else)返回空向量
成品
struct Solution;
impl Solution {
pub fn two_sum(nums:Vec<i32>,target:i32)-> Vec<i32>{
let len = nums.len();//取数组长度len 长度类型为*usize*
for i in 0..len {
for j in (i+1)..len{
if nums[i]+nums[j]==target{
return vec![i as i32,j as i32];//返回下标并转换类型 [1,2]
}
}
}
vec![] //else 返回空向量
}
}
fn main(){
let nums= vec![1,2,3];
let target = 5;
let result = Solution::two_sum(nums, target);
print!("{:?}",result)
}
@ling 呜呜呜,我在力扣迈出第一步了
有人相爱,有人夜里开车看海,有人LeetCode第一题都做不出来