用Rust刷LeetCode之66 加一

66. 加一[1]

难度: 简单

alt

func plusOne(digits []int) []int {
    length := len(digits)

    // 从最低位开始遍历,逐位加一
    for i := length - 1; i >= 0; i-- {
        if digits[i] < 9 {
            digits[i]++
            return digits
        }
        digits[i] = 0
    }

    // 如果循环结束仍然没有返回,则说明最高位也进位了,需要在数组首位插入 1
    return append([]int{1}, digits...)
}

解题思路

从最低位开始遍历,逐位加一。如果最高位进位,则在数组首位插入 1。

复杂度分析

时间复杂度:O(n),其中 n 是数组的长度。我们只遍历了数组一次。

空间复杂度:O(1),除了返回的数组,没有其他额外的空间。


Rust版本:

pub fn plus_one(digits: Vec<i32>) -> Vec<i32> {
    let mut digits = digits;
    let length = digits.len();

    for i in (0..length).rev() {
        if digits[i] < 9 {
            digits[i] += 1;
            return digits;
        }
        digits[i] = 0;
    }

    digits.insert(01); // 返回(),而非Vec<i32>
    digits // 或者 return digits;
}


几乎同样的写法,但Rust消耗的内存,比Go还要多一些..

alt
alt

完整的rust代码:

fn main() {
    let digits = vec![123];
    let result = plus_one(digits);
    println!("{:?}", result); // 输出: [1, 2, 4]

    let digits = vec![999];
    let result = plus_one(digits);
    println!("{:?}", result); // 输出: [1, 0, 0, 0]

    let digits = vec![919];
    let result = plus_one(digits);
    println!("{:?}", result); // 输出: [9, 2, 0]
}

pub fn plus_one(digits: Vec<i32>) -> Vec<i32> {
    let mut digits = digits;
    let length = digits.len();

    for i in (0..length).rev() {
        if digits[i] < 9 {
            digits[i] += 1;
            return digits;
        }
        digits[i] = 0;
    }

    digits.insert(01);
    digits // 或者 return digits;
}
alt

(0..length).rev()中这两个语法糖挺不错


在 Rust 中,(0..length) 是一个范围(range)表达式,表示一个从 0 到 length-1 的半开区间。这个范围可以用于迭代、循环和其他需要遍历一系列整数的场景。

.rev() 是对范围进行反向迭代(reverse iteration)的方法调用。它返回一个可以从范围的最后一个元素向前迭代的迭代器。

因此,(0..length).rev() 表达式返回一个迭代器,可以从 length-1 开始迭代到 0。

在上述代码中,(0..length).rev() 用于循环遍历 digits 数组的每个索引,但是从最高位(最后一个元素)开始。这样可以方便地进行进位操作和遍历。


在 Rust 中,范围(range)表达式是一种用于表示一个数值范围的语法结构。它由两个点 .. 组成,并用于创建一个半开区间(half-open interval)。

范围表达式有两种形式:

  1. start..end:表示从 start(包含)到 end(不包含)的半开区间,迭代器将包含从 startend-1 的值。
  2. start..=end:表示从 start(包含)到 end(包含)的闭区间,迭代器将包含从 startend 的值。

参考资料

[1]

66. 加一: https://leetcode.cn/problems/plus-one/

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257690.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件重命名的最佳实践:如何批量处理文件,告别手动操作

在日常生活和工作中&#xff0c;经常要处理大量的文件&#xff0c;其中最频繁的操作之一就是给文件重命名。如果还在手动一个一个地重命名文件&#xff0c;那么就OUT了&#xff01;文件重命名无非是修改文件名中的某些字符或者顺序&#xff0c;以实现文件名的统一或者便于管理。…

大数据技术4:Lambda和Kappa架构区别

前言&#xff1a;在大数据处理领域&#xff0c;两种突出的数据架构已成为处理大量数据的流行选择&#xff1a;Lambda 架构和 Kappa 架构。这些架构为实时处理和批处理提供了强大的技术解决方案&#xff0c;使组织能够从其数据中获得有价值的见解。随着互联网时代来临&#xff0…

各大厂商证书申请遇到的问题

证书作用&#xff1a; 确保数据传输过程中不被篡改、拦截 遭受中间件攻击、确保数据完整性、保密性 申请方式&#xff1a; 文件验证、cname验证&#xff08;需要在域名平台上添加cname记录&#xff09; 本次采用文本验证 添加需要申请的域名 将tx生成的txt文件放在 IIS站点…

1 接口测试介绍

在软件测试工作中&#xff0c;接口测试是必不可少的。接口测试一般是发生在单元测试之后&#xff0c;系统测试之前。当开发人员输出API文档后&#xff0c;测试人员就可以开始编写接口测试用例了。接口测试可以让测试人员更早的介入&#xff0c;不需要等待前后端联调完成才开始测…

常用API(一)

API(全称 Application Programming Interface&#xff1a;应用程序编程接口) 就是别人写好的一些程序&#xff0c;给我们直接拿去调用即可解决问题的。 包 什么是包&#xff1f; 包是用来分门别类的管理各种不同程序的&#xff0c;类似于文件夹&#xff0c;建包有利于程序的管…

HCIP —— BGP 基础 (上)

BGP --- 边界网关协议 &#xff08;路径矢量协议&#xff09; IGP --- 内部网关协议 --- OSPF RIP ISIS EGP --- 外部网关协议 --- EGP BGP AS --- 自治系统 由单一的组织或者机构独立维护的网络设备以及网络资源的集合。 因 网络范围太大 需 自治 。 为区分不同的AS&#…

二层交换原理

二层交换设备工作在OSI模型的第二层&#xff0c;即数据链路层&#xff0c;它对数据包的转发是建立在MAC&#xff08;Media Access Control &#xff09;地址基础之上的。二层交换设备不同的接口发送和接收数据独立&#xff0c;各接口属于不同的冲突域&#xff0c;因此有效地隔离…

AtCoder ABC周赛2023 11/4 (Sat) E题题解

目录 原题截图&#xff1a; 原题翻译 题目大意&#xff1a; 主要思路&#xff1a; 代码&#xff1a; 原题截图&#xff1a; 原题翻译 题目大意&#xff1a; 给你一个数组&#xff0c;给你一个公式&#xff0c;让你选k个元素&#xff0c;用公式算出最终得分。 主要思路&am…

H3.3K27M弥漫性中线胶质瘤的反义寡核苷酸治疗

今天给同学们分享一篇实验文章“Antisense oligonucleotide therapy for H3.3K27M diffuse midline glioma”&#xff0c;这篇文章发表在Sci Transl Med期刊上&#xff0c;影响因子为17.1。 结果解读&#xff1a; CRISPR-Cas9消耗H3.3K27M恢复了H3K27三甲基化&#xff0c;并延…

类风湿性关节炎口腔黏膜破裂引发抗瓜氨酸细菌和人蛋白抗体反应

今天给同学们分享一篇实验文章“Oral mucosal breaks trigger anti-citrullinated bacterial and human protein antibody responses in rheumatoid arthritis”&#xff0c;这篇文章发表在Sci Transl Med期刊上&#xff0c;影响因子为17.1。 结果解读&#xff1a; 口腔黏膜破…

oomall课堂笔记

一、项目分层结构介绍 controller层&#xff08;控制器层&#xff09;&#xff1a; 作用&#xff1a;负责输出和输入&#xff0c;接收前端数据&#xff0c;把结果返回给前端。 1.处理用户请求&#xff0c;接收用户参数 2.调用service层处理业务&#xff0c;返回响应 servi…