Rust每日一练(Leetday0015) 字符串相乘、通配符匹配、跳跃游戏II

news2024/11/24 17:49:50

目录

43. 字符串相乘 Multiply Strings  🌟🌟

44. 通配符匹配 Wildcard Matching  🌟🌟🌟

45. 跳跃游戏 II Jump Game II  🌟🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


43. 字符串相乘 Multiply Strings

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1 和 num2 只能由数字组成。
  • num1 和 num2 都不包含任何前导零,除了数字0本身。

代码:

fn multiply(num1: String, num2: String) -> String {
    if num1 == "0" || num2 == "0" {
        return String::from("0");
    }
    let (m, n) = (num1.len(), num2.len());
    let mut ans_arr: Vec<i32> = vec![0; m+n];
    let num1_bytes = num1.as_bytes();
    let num2_bytes = num2.as_bytes();
    for i in (0..m).rev() {
        let x = (num1_bytes[i] - b'0') as i32;
        for j in (0..n).rev() {
            let y = (num2_bytes[j] - b'0') as i32;
            ans_arr[i + j + 1] += x * y;
        }
    }
    for i in (1..m+n).rev() {
        ans_arr[i - 1] += ans_arr[i] / 10;
        ans_arr[i] %= 10;
    }
    let mut idx = 0;
    while idx < m+n && ans_arr[idx] == 0 {
        idx += 1;
    }
    let ans_bytes: Vec<u8> = ans_arr[idx..].iter().map(|x| (*x as u8) + b'0').collect();
    String::from_utf8(ans_bytes).unwrap()
}

fn main() {
    println!("{}", multiply(String::from("123"), String::from("456")));
}

输出:

56088


44. 通配符匹配 Wildcard Matching

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。

'?' 可以匹配任何单个字符。
'*' 可以匹配任意字符串(包括空字符串)。

两个字符串完全匹配才算匹配成功。

说明:

  • s 可能为空,且只包含从 a-z 的小写字母。
  • p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *

示例 1:

输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。

示例 2:

输入:
s = "aa"
p = "*"
输出: true
解释: '*' 可以匹配任意字符串。

示例 3:

输入:
s = "cb"
p = "?a"
输出: false
解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。

示例 4:

输入:
s = "adceb"
p = "*a*b"
输出: true
解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".

示例 5:

输入:
s = "acdcb"
p = "a*c?b"
输出: false

代码:

fn is_match(s: &str, p: &str) -> bool {
    let (mut si, mut pi) = (0, 0);
    let (mut s_si, mut p_si) = (0, 0);
    let s_bytes = s.as_bytes();
    let p_bytes = p.as_bytes();
    while si < s_bytes.len() {
        if pi < p_bytes.len() && (s_bytes[si] == p_bytes[pi] || p_bytes[pi] == b'?') {
            si += 1;
            pi += 1;
        } else if pi < p_bytes.len() && p_bytes[pi] == b'*' {
            s_si = si;
            p_si = pi;
            pi += 1;
        } else if p_si == usize::MAX {
            return false;
        } else {
            s_si += 1;
            si = s_si;
            pi = p_si + 1;
        }
    }
    while pi < p_bytes.len() && p_bytes[pi] == b'*' {
        pi += 1;
    }
    pi == p_bytes.len()
}

fn main() {
    println!("{}", is_match("aa", "*"));
    println!("{}", is_match("adceb", "*a*b"));
    println!("{}", is_match("acdcd", "a*c?b"));
}

输出:

true
true
false


45. 跳跃游戏 II Jump Game II

给你一个非负整数数组 nums ,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

假设你总是可以到达数组的最后一个位置。

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 10^4
  • 0 <= nums[i] <= 1000

代码:

fn jump(nums: Vec<i32>) -> i32 {
    let (mut end, mut max_pos, mut steps) = (0, 0, 0);
    for i in 0..nums.len()-1 {
        max_pos = max(max_pos, i + nums[i] as usize);
        if i == end {
            end = max_pos;
            steps += 1;
        }
    }
    steps
}

fn max(a: usize, b: usize) -> usize {
    if a > b {
        a
    } else {
        b
    }
}

fn main() {
    println!("{}", jump(vec![2, 3, 1, 1, 4]));
    println!("{}", jump(vec![2, 3, 0, 1, 4]));
}

输出:

2
2


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/

Rust每日一练 专栏

(2023.5.16~)更新中...

Golang每日一练 专栏

(2023.3.11~)更新中...

Python每日一练 专栏

(2023.2.18~2023.5.18)暂停更

C/C++每日一练 专栏

(2023.2.18~2023.5.18)暂停更

Java每日一练 专栏

(2023.3.11~2023.5.18)暂停更

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python中如何创建矩阵

Python中如何创建矩阵 矩阵&#xff08;matrix&#xff09;是线性代数中的重要概念&#xff0c;它在数学、物理、计算机科学等领域中都有着广泛应用。在Python编程中&#xff0c;我们也经常需要创建矩阵来进行各种数学计算&#xff0c;例如矩阵乘法、逆矩阵求解等。那么&#…

chatgpt赋能python:Python中如何去掉重复项

Python中如何去掉重复项 在Python的编程中&#xff0c;常常会遇到需要去掉重复项的情况。重复项的存在会极大地影响程序的效率和准确性。在本篇文章中&#xff0c;我们将讨论Python中如何去掉重复项&#xff0c;包括使用set()函数、使用列表推导式和使用字典的方法。这些方法都…

chatgpt赋能python:Python中怎么分段?

#Python中怎么分段&#xff1f; ##介绍 Python是一种高级编程语言&#xff0c;它被广泛用于各种任务&#xff0c;包括数据分析、Web开发、人工智能、游戏开发等等。对于Python的初学者来说&#xff0c;其中有一个重要的问题是如何正确地分段。在这篇文章中&#xff0c;我们将…

夜深人静学32系列16——RTC实时时钟

RTC时钟 RTC什么是RTC&#xff1f;RTC结构框图CubeMX配置RTC代码配置 实战——简易时钟任务要求代码实现实验结果 补充唤醒功能配置代码如下&#xff1a; RTC 什么是RTC&#xff1f; RTC(Real Time Clock)&#xff1a;实时时钟 RTC是个独立的定时器。RTC模块拥有一个连续计数…

chatgpt赋能python:Python中如何清屏

Python中如何清屏 在Python编程中&#xff0c;有时候我们需要清除屏幕以方便我们查看输出&#xff0c;或者在一些UI开发中&#xff0c;需要在用户交互后清除屏幕并重新渲染界面。本文将介绍Python中如何清屏。 使用os模块的system函数 os模块提供了执行操作系统命令的接口&a…

Struts2 012 漏洞分析

0x00 前言 之前的003,005,009都是基于参数本身的ONGL注入&#xff0c;012则是基于参数值的ONGL注入 0x01 环境 还是建议使用vulhub poc: 无回显 %{(#context[xwork.MethodAccessor.denyMethodExecution]false)(#_memberAccess[allowStaticMethodAccess]true)(java.lang.R…

chatgpt赋能python:Python中如何停止运行程序

Python中如何停止运行程序 Python 是一种功能丰富、灵活的编程语言&#xff0c;但有时候你需要停止运行你的程序&#xff0c;无论是因为出现了错误&#xff0c;或者因为完成了你想要的任务。在本文中&#xff0c;我们将介绍 Python 中停止运行程序的几种方法&#xff0c;以及对…

Angular学习笔记:动画

本文是自己的学习笔记&#xff0c;主要参考资料如下。 - Angular官方文档&#xff1a;https://angular.io/guide/animations 1、前置工作1.1、导入依赖 2、代码部分2.1、有关的imports2.2、定义触发条件&#xff08;trigger&#xff09;2.3、定义状态&#xff08;state&#…

chatgpt赋能python:Python中如何排序

Python中如何排序 Python是一门功能强大的编程语言&#xff0c;拥有丰富的库和模块来满足各种需求。在Python中&#xff0c;排序是一项常见的任务&#xff0c;它可以帮助我们对数据进行整理和分析。本文将介绍Python中如何排序&#xff0c;包括排序算法和相关的库函数。 排序…

SysInfo(电脑系统信息)0.0.0.1beta2

文件说明符 : D:\masm32\wmi\sysInfo\sysInfo0.0.0.1beta2.exe 属性 : A--- 数字签名:否 PE文件:是 语言 : 中文(简体&#xff0c;中国) 文件版本 : 0.0.0001 beta2 说明 : 电脑系统信息 版权 : PurpleEndurer 产品版本 : 0.0.0001 beta2 产品名称 : 电脑系统信息 公司名称 : P…

oracle--常用维护语句

1、sqlpus 连接 [rootdb-server ~]$su - oracle ##切换oracle用户 [oracledb-server ~]$ sqlplus /nolog ##启动客户端进程 SQL>conn zyl/zyl2022 ##普通用户登录 SQL>conn / as sysdba ##管理员登录 Connected. SQL> 2、启动或关闭数据库 SQL>startup…

【项目实战】三维重建:基于RGB-D数据集的TSDF算法

文章目录 一、项目简介二、算法原理2.1、每个体素都有两个值&#xff1a;TSDF值&#xff08;用于生成重建表面&#xff09;、RGB灰度值&#xff08;给重建表面贴上彩色纹理&#xff09;2.2、TSDF算法步骤一&#xff1a;体素体建立步骤二&#xff1a;划分网格&#xff08;体素化…

2023-05-30 Unity 2进制6——Excel写入器ExcelWriter

文章目录 一、Epplus 使用二、ExcelWriter&#xff08;一&#xff09;文件结构&#xff08;二&#xff09;操作说明&#xff08;三&#xff09;操作示例&#xff08;四&#xff09;完整代码 一、Epplus 使用 &#xff08;一&#xff09;获取 Excel 文件 string filePath App…

一图看懂 autopep8 模块:自动格式化Python代码,以使其符合PEP8规范,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 autopep8 模块&#xff1a;自动格式化Python代码,以使其符合PEP8规范&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&#…

2022年软件测试人员调查统计

1、软件测试从业人员的年龄分布 测试行业的主力军年龄分布主要是集中在 26-30 岁这个区间&#xff0c;这部分的群体承担着行 业发展的主导力量&#xff0c;占 43.2%。根据数据显示&#xff0c;被调查者中占比最多的是 26-30 岁区间的软件测试从业人员&#xff0c;26-30 岁的测试…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(二)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

Leetcode 2455 可被三整除的偶数的平均值

Leetcode 2455 可被三整除的偶数的平均值 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/average-value-of-even-numbers-that-are-divisible-by-three/description/ 博主Github&#xff1a;https://github.com/GDUT-…

Paper:《Is GPT-4 a Good Data Analyst?GPT-4是一个好的数据分析师吗?》翻译与解读

Paper&#xff1a;《Is GPT-4 a Good Data Analyst?GPT-4是一个好的数据分析师吗&#xff1f;》翻译与解读 导读&#xff1a;该论文提出了一个框架&#xff0c;用来引导GPT-4进行端到端的数据分析任务&#xff0c;包括数据提取、可视化生成以及数据分析。GPT-4 能生成SQL查询来…

chatgpt赋能python:Python中的切片操作

Python中的切片操作 介绍 在Python中&#xff0c;切片操作是一种常用的操作方式&#xff0c;可以快速地获取列表、元组、字符串等类型的一部分数据。切片操作通常使用冒号来表示&#xff0c;其形式为[start:stop:step]&#xff0c;其中start是起始位置,stop是结束位置(不包含…

编译型语言和解释型语言的定义与区别

目录 编译型语言 1) 可执行程序不能跨平台 2) 源代码不能跨平台 解释型语言 关于Python 总结 通过高级语言编写的源码&#xff0c;我们能够轻松理解&#xff0c;但对于计算机来说&#xff0c;它只认识二进制指令&#xff0c;源码就是天书&#xff0c;根本无法识别。源码要…