Rust每日一练(leetDay0023) 二进制求和、左右对齐、平方根

news2024/10/6 10:40:00

目录

67. 二进制求和 Add Binary  🌟

68. 文本左右对齐 Text Justification  🌟🌟🌟

69. x 的平方根  Sqrt x  🌟

🌟 每日一练刷题专栏 🌟

Rust每日一练 专栏

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


67. 二进制求和 Add Binary

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。

代码1:

fn add_binary(a: &str, b: &str) -> String {
    let (n, m) = (a.len(), b.len());
    let (a, mut b) = if n < m {
        (b, a)
    } else {
        (a, b)
    };
    let padding = "0".repeat(n - m);
    let temp = padding + b;
    b = &temp;
    let mut res = vec![b'0'; n + 1];
    let mut carry = 0;
    for i in (0..n).rev() {
        let sum = carry + a.as_bytes()[i] - b'0' + b.as_bytes()[i] - b'0';
        res[i + 1] = sum % 2 + b'0';
        carry = sum / 2;
    }
    if carry > 0 {
        res[0] = b'1';
        String::from_utf8(res).unwrap()
    } else {
        String::from_utf8(res[1..].to_vec()).unwrap()
    }
}

fn main() {
    println!("{}", add_binary("11", "1"));
    println!("{}", add_binary("1010", "1011"));
}

代码2:

fn add_binary(a: &str, b: &str) -> String {
    let mut n = a.len() as i32 - 1;
    let mut m = b.len() as i32 - 1;
    let mut carry = 0;
    let mut res = String::new();
    while n >= 0 || m >= 0 || carry > 0 {
        if n >= 0 {
            carry += a.chars().nth(n as usize).unwrap() as i32 - '0' as i32;
            n -= 1;
        }
        if m >= 0 {
            carry += b.chars().nth(m as usize).unwrap() as i32 - '0' as i32;
            m -= 1;
        }
        res = (carry % 2).to_string() + &res;
        carry /= 2;
    }
    res
}

fn main() {
    println!("{}", add_binary("11", "1"));
    println!("{}", add_binary("1010", "1011"));
}

输出:

100
10101


68. 文本左右对齐 Text Justification

给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。

你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' ' 填充,使得每行恰好有 maxWidth 个字符。

要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。

文本的最后一行应为左对齐,且单词之间不插入额外的空格。

注意:

  • 单词是指由非空格字符组成的字符序列。
  • 每个单词的长度大于 0,小于等于 maxWidth
  • 输入单词数组 words 至少包含一个单词。

示例 1:

输入: words = ["This", "is", "an", "example", "of", "text", "justification."], maxWidth = 16
输出:
[
   "This    is    an",
   "example  of text",
   "justification.  "
]

示例 2:

输入:words = ["What","must","be","acknowledgment","shall","be"], maxWidth = 16
输出:
[
  "What   must   be",
  "acknowledgment  ",
  "shall be        "
]
解释: 注意最后一行的格式应为 "shall be    " 而不是 "shall     be",
     因为最后一行应为左对齐,而不是左右两端对齐。       
     第二行同样为左对齐,这是因为这行只包含一个单词。

示例 3:

输入:words = ["Science","is","what","we","understand","well","enough","to","explain","to","a","computer.","Art","is","everything","else","we","do"],maxWidth = 20
输出:
[
  "Science  is  what we",
  "understand      well",
  "enough to explain to",
  "a  computer.  Art is",
  "everything  else  we",
  "do                  "
]

提示:

  • 1 <= words.length <= 300
  • 1 <= words[i].length <= 20
  • words[i] 由小写英文字母和符号组成
  • 1 <= maxWidth <= 100
  • words[i].length <= maxWidth

代码:

pub fn full_justify(words: Vec<String>, max_width: i32) -> Vec<String> {
    let mut ans = Vec::new();
    let mut right = 0;
    let n = words.len();
    while right < n {
        let left = right;
        let mut sum_len = 0;
        while right < n && sum_len + words[right].len() + right - left <= max_width as usize {
            sum_len += words[right].len();
            right += 1;
        }
        if right == n {
            let s = words[left..].join(" ");
            ans.push(s.clone() + &" ".repeat(max_width as usize - s.len()));
        } else {
            let num_words = right - left;
            let num_spaces = max_width as usize - sum_len;
            if num_words == 1 {
                ans.push(words[left].to_owned() + &" ".repeat(num_spaces));
            } else {
                let avg_spaces = num_spaces / (num_words - 1);
                let extra_spaces = num_spaces % (num_words - 1);
                let mut s1 = String::new();
                for i in left..left+extra_spaces+1 {
                    s1 += &words[i];
                    s1 += &" ".repeat(avg_spaces + 1);
                }
                let mut s2 = String::new();
                for i in left+extra_spaces+1..right {
                    s2 += &words[i];
                    if i < right - 1 {
                        s2 += &" ".repeat(avg_spaces);
                    }
                }
                ans.push(s1 + &" ".repeat(avg_spaces) + &s2);
            }
        }
    }
    ans
}

fn main() {
    let words: Vec<String> = vec!["This", "is", "an", "example", "of", "text", "justification."]
        .iter()
        .map(|s| s.to_string())
        .collect();
    let max_width = 16;
    for line in full_justify(words.clone(), max_width) {
        println!("{}", line);
    }
    println!();
    let words: Vec<String> = vec!["What", "must", "be", "acknowledgment", "shall", "be"]
        .iter()
        .map(|s| s.to_string())
        .collect();
    for line in full_justify(words.clone(), max_width) {
        println!("{}", line);
    }
    println!();
    let words: Vec<String> = vec!["Science", "is", "what", "we", "understand", "well", "enough", "to", "explain", "to", "a", "computer.", "Art", "is", "everything", "else", "we", "do"]
        .iter()
        .map(|s| s.to_string())
        .collect();
    let max_width = 20;
    for line in full_justify(words.clone(), max_width) {
        println!("{}", line);
    }
}

输出:

This      is     an

example of text

justification.

What    must   be

acknowledgment

shall be

Science is  what  we

understand        well

enough to explain to

a   computer.   Art  is

everything  else   we

do


69. x 的平方根  Sqrt x

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

提示:

  • 0 <= x <= 2^31 - 1

代码1:暴力枚举

fn my_sqrt(x: i32) -> i32 {
    let mut i = 0;
    while i * i <= x {
        i += 1;
    }
    i - 1
}

fn main() {
    println!("{}", my_sqrt(4));
    println!("{}", my_sqrt(8));
    println!("{}", my_sqrt(122));
}

代码2:牛顿迭代法

fn my_sqrt(x: i32) -> i32 {
    if x == 0 {
        return 0;
    }
    let mut x0 = x as f64;
    let eps = 1e-6;
    loop {
        let x1 = 0.5 * (x0 + (x as f64) / x0);
        if (x1 - x0).abs() < eps {
            break;
        }
        x0 = x1;
    }
    x0 as i32
}

fn main() {
    println!("{}", my_sqrt(4));
    println!("{}", my_sqrt(8));
    println!("{}", my_sqrt(122));
}

代码3: 二分查找

fn my_sqrt(x: i32) -> i32 {  
    let mut left = 1;  
    let mut right = x.max(1);  
    while left <= right {  
        let mid = left + (right - left) / 2;  
        if mid * mid == x {  
            return mid;  
        } else if mid * mid < x {  
            left = mid + 1;  
        } else {  
            right = mid - 1;  
        }  
    }  
    left - 1  
}  
  
fn main() {
    println!("{}", my_sqrt(4));
    println!("{}", my_sqrt(8));
    println!("{}", my_sqrt(122));
}

输出:

2
2
11


🌟 每日一练刷题专栏 🌟

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

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

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

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

 主页: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/618011.html

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

相关文章

低压安全用电云平台隐患故障的应用设计 安科瑞 许敏

前言&#xff1a;低压安全用电系统是保障用电质量的重要依托&#xff0c;也是增强用电安全性的根本依据。而在其中应用物联网技术&#xff0c;可进一步提升监测效率。在此之上&#xff0c;文章简要分析了低压安全用电系统的设计基准与监测内容&#xff0c;并通过科学制定系统建…

IMX6ULL裸机篇之I2C实验之从设备代码实现

一. I2C实验 本文介绍 I2C实验&#xff0c;关于 从设备 AP3216C传感器的I2C代码实现。 AP3216C从设备是 三合一传感器&#xff0c;即作为 I2C通信中从设备使用。 以下文章是关于 I2C实验&#xff0c;关于主控制器&#xff08;即主设备&#xff09;端的 I2C代码实现&#xff…

LinkedList源码

介绍 基于双向链表实现线程不安全插入删除效率较高&#xff0c;但不支持随机查找 public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable常量&变量 // 元素数量transient…

秒杀抢购案例,基于 Redis 实现

目录 1、关于全局唯一 ID 生成器 1.1 需要满足的特性 1.2 代码实现 1.3 其他的唯一 ID 生成策略 2、实现秒杀下单 2.1 超卖问题的产生 2.2 超卖问题的分析与解决 2.21 悲观锁与乐观锁 2.22 乐观锁中的两种常用方案 ▶️version 版本控制方案 ▶️CAS方案 2…

AIGC资源整理

这几个月我深入研究了AIGC&#xff0c;同时业翻阅和搜集了大量的资料&#xff0c;累计也花了1000去买了各种信息源 为了方便我的好朋友们学习&#xff0c;我将那些优质的免费信息源和工具&#xff0c;都进行了整理。 如果你也想学习AIGC、ChatGPT相关的内容&#xff0c;那么我很…

深入探索:在std::thread中创建并管理QEventLoop的全面指南

深入探索&#xff1a;在std::thread中创建并管理QEventLoop的全面指南 1. 前言&#xff1a;理解QEventLoop和std::thread的基本概念1.1 QEventLoop的基本概念和工作原理1.2 std::thread的基本概念和工作原理1.3 QTimer的基本概念和工作原理 2. 在std::thread中创建QEventLoop&a…

chatgpt赋能python:Python字大小调整:优化SEO效果

Python字大小调整&#xff1a;优化SEO效果 随着互联网信息技术的不断发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为互联网领域的重要一环。在进行网站制作和信息发布时&#xff0c;如何提高网站的曝光度和排名成为了关键问题。针对Python编程爱好者和从业…

chatgpt赋能python:Python定义分段函数的完整指南

Python定义分段函数的完整指南 什么是分段函数&#xff1f; 当我们在解决线性和非线性方程时&#xff0c;分段函数是一个非常重要的数学工具。 分段函数可以是由不同的函数组成&#xff0c;它们在定义域中的不同部分内具有不同的公式或条款。换句话说&#xff0c;一个分段函数…

PyGame游戏编程

Python非常受欢迎的一个原因是它的应用领域非常广泛&#xff0c;其中就包括游戏开发。而是用Python进行游戏开发的首选模块就是PyGame。 1. 初识Pygame PyGame是跨平台Python模块&#xff0c;专为电子游戏设计&#xff0c;包含图像、声音等&#xff0c;创建在SDL&#xff08;…

量子前沿 | 单光子,为什么是量子科技的“源头”?

光子盒研究院出品 前言&#xff1a;基础研究是科技创新的基石。鉴于此&#xff0c;光子盒增设“量子前沿”全新栏目&#xff0c;旨在介绍量子科技的一系列基础技术、相关进展及现状前景。 我们对量子信息的兴趣出现在20世纪90年代和21世纪。在该领域的发展过程中&#xff0c;单…

文件上传与PDF报表入门

文件上传与PDF报表入门 理解DataURL的基本使用&#xff0c;实现DataURL的文件上传完成基于七牛云的文件上传 理解 JasperReport生命周期 独立完成 JasperReport的入门案例 图片上传 需求分析 如图所示&#xff0c;实现员工照片上传功能 Data URL DataURL概述 所谓DataURL是指&q…

chatgpt赋能python:Python定义未知长度数组

Python定义未知长度数组 Python是一种受欢迎的编程语言&#xff0c;广泛用于数据分析&#xff0c;人工智能&#xff0c;WEB开发和其他领域。其中一个非常方便的特性是它提供了定义未知长度数组的选项。 在本文中&#xff0c;我们将介绍如何使用Python定义未知长度数组&#x…

四、纹理显示图片

第一部分纹理基础 1)基础概念 在 OpenGLES 开发中&#xff0c;纹理除了用于装饰物体表面&#xff0c;还可以用来作为存储数据的容器。 纹理映射&#xff1a;纹理映射就是通过为图元的顶点坐标指定恰当的纹理坐标&#xff0c;通过纹理坐标在纹理图中选定特定的纹理区域&#…

汽车电子AUTOSAR之Event

上文AUTOSAR基础篇之DTC中提到event是故障监控的基本单元&#xff0c;本文将从event的使能条件&#xff08;Enable Condition&#xff09;、上报方式、去抖动策略&#xff08;Debouncing Strategy&#xff09;、优先级&#xff08;Priority&#xff09;、Displacement、依赖关系…

解决SpringBoot配置文件项目重启出现乱码的情况

近日&#xff0c;在创建了SpringBoot项目后往配置文件中写了相关的系统配置&#xff0c;并且在上面加了中文注释&#xff0c;但是在重启项目或开机重启后遇到了注释乱码的情况&#xff0c;查询了各种相关资料&#xff0c;得以解决 发现问题 首先看到我在这个application.prope…

Golang每日一练(leetDay0089) 滑动窗口最大值、中位数

目录 239. 滑动窗口最大值 Sliding Window Maximum &#x1f31f;&#x1f31f;&#x1f31f; 480. 滑动窗口中位数 Sliding Window Median &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专…

chatgpt赋能python:Python安装FBProphet:绝佳的时间序列预测工具

Python安装FBProphet&#xff1a;绝佳的时间序列预测工具 随着时间序列数据应用场景的不断增加&#xff0c;越来越多的数据科学家和工程师开始使用FBProphet进行时间序列预测。FBProphet是由Facebook开发的一种开源预测工具&#xff0c;它使用先进的统计方法进行时间序列分析&…

案例40:基于Springboot疫苗预约系统开题报告设计

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Day_41顺序查找与折半查找

目录 一. 顺序查找和折半查找的实现 1. 顺序查找 1.1 一般线性表的顺序查找 1.2 有序表的顺序查找 2. 折半查找 二. 代码实现 1. 内部节点 2. 类的构造函数 3. 顺序查找 4. 折半查找 三. 代码展示 四. 数据测试 五. 小结 一. 顺序查找和折半查找的实现 1. 顺序查找…

chatgpt赋能python:Python定义错误:什么是Python定义错误

Python定义错误&#xff1a;什么是Python定义错误 Python是一种强大的编程语言&#xff0c;被广泛用于各种领域&#xff0c;例如Web开发&#xff0c;数据分析&#xff0c;机器学习等。然而&#xff0c;即使是最有经验的Python开发人员也会犯一些常见的错误&#xff0c;其中之一…