【LeetCode】数学精选4题

news2024/9/22 1:00:49

目录

1. 二进制求和(简单)

2. 两数相加(中等)

3. 两数相除(中等)

4. 字符串相乘(中等)


1. 二进制求和(简单)

从字符串的右端出发向左做加法,逢二进一。

class Solution {
public:
    string addBinary(string a, string b) {
        string ans;
        int i = a.size() - 1; // a的下标是从0到i
        int j = b.size() - 1; // b的下标是从0到j
        int carry = 0 ; // 进位
        while (i >= 0 || j >= 0)
        {
            int digitA = i >= 0 ? a[i--] - '0' : 0;
            int digitB = j >= 0 ? b[j--] - '0' : 0;
            int sum = digitA + digitB + carry;
            carry = sum >= 2 ? 1 : 0;
            sum = sum >= 2 ? sum - 2 : sum;
            ans += sum + '0';
        }
        if (carry)
        {
            ans += '1';
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

2. 两数相加(中等)

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* preHead = new ListNode; // 哨兵节点
        ListNode* tail = preHead;
        int carry = 0; // 进位
        while (l1 || l2)
        {
            int n1 = l1 ? l1->val: 0;
            int n2 = l2 ? l2->val: 0;
            int sum = n1 + n2 + carry;
            tail->next = new ListNode(sum % 10);
            carry = sum / 10;
            tail = tail->next;
            if (l1)
            {
                l1 = l1->next;
            }
            if (l2)
            {
                l2 = l2->next;
            }
        }
        if (carry)
        {
            tail->next = new ListNode(carry);
        }
        return preHead->next;
    }
};

3. 两数相除(中等)

假设被除数是a,除数是b。

如果a、b都是正数,且a>=b

a最多大于b的2^k倍,将a减去b的2^k倍,剩下的被除数再重复这样的操作,直到a < b

以22除以3为例:

22最多大于3的4倍:22 - 3 * 4 = 10

10最多大于3的2倍:10 - 3 * 2 = 4

4最多大于3的1倍: 4 - 3 * 1 = 1

商是4 + 2 + 1 = 7,余数是1

如果a、b都是负数,且a <= b

a最多小于b的2^k倍,将a减去b的2^k倍,剩下的被除数再重复这样的操作,直到a > b

以-22除以-3为例:

-22最多小于-3的4倍:-22 - (-3) * 4 = -10

-10最多小于-3的2倍:-10 - (-3) * 2 = -4

-4最多小于-3的1倍: -4 - (-3) * 1 = -1

商是4 + 2 + 1 = 7,余数是-1

class Solution {
public:
    int divide(int dividend, int divisor) {
        // -2^31/-1=2^31 溢出
        if (dividend == INT_MIN)
        {
            if (divisor == -1)
            {
                return INT_MAX;
            }
            else if (divisor == 1)
            {
                return INT_MIN;
            }
        }
        // 全部转化为负数,如果全部转化为正数,-2^31转化为正数会溢出
        int negative = 2; // 表示被除数和除数有几个是负数
        if (dividend > 0)
        {
            dividend = -dividend;
            negative--;
        }
        if (divisor > 0)
        {
            divisor = -divisor;
            negative--;
        }

        int result = divideCore(dividend, divisor);
        return negative == 1 ? -result : result;
    }

private:
    int divideCore(int a, int b)
    {
        int result = 0;
        while (a <= b)
        {
            int k = 1;
            int val = b; // val表示b的2^k倍
            while (val >= INT_MIN / 2 && a <= val + val)
            {
                k += k;
                val += val;
            }
            result += k;
            a -= val;
        }
        return result;
    }
};

4. 字符串相乘(中等)

无进位相乘后相加,再处理进位。

class Solution {
public:
    string multiply(string num1, string num2) {
        if (num1 == "0" || num2 == "0")
            return "0";
            
        int n1 = num1.size();
        int n2 = num2.size();
        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());
        vector<int> sums(n1 + n2 -1);
        // 无进位相乘后相加
        for (int i = 0; i < n2; i++)
        {
            for (int j = 0; j < n1; j++)
            {
                sums[i + j] += (num2[i] - '0') * (num1[j] - '0');
            }
        }
        // 处理进位
        string ans;
        int i = 0;
        int carry = 0;
        while (i < n1 + n2 -1)
        {
            int sum = sums[i++] + carry;
            ans += sum % 10 + '0';
            carry = sum / 10;
        }
        if (carry)
        {
            ans += carry + '0';
        }
        // 反转
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

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

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

相关文章

Unity3D学习之UI系统——GUI

文章目录 1. 前言2. 工作原理和主要作用3. 基础控件3.1 重要参数及文本和按钮3.1.1 GUI 共同点3.1.2 文本控件3.1.3 按钮控件 3.2 多选框和单选框3.2.1 多选框3.2.2 单选框3.2.3 输入框3.2.4 拖动条 3.3 图片绘制和框3.3.1 图片3.3.2 框绘制 4 工具栏和选择网格4.1 工具栏4.2 选…

数据分析中常用的指标或方法

一、方差与标准差二、协方差三、皮尔逊系数四、斯皮尔曼系数五、卡方检验六、四分位法和箱线图七、 一、方差与标准差 总体方差 V a r ( x ) σ 2 ∑ i 1 n ( x i − x ˉ ) 2 n ∑ i 1 n x i 2 − n x ˉ 2 n E ( x 2 ) − [ E ( x ) ] 2 Var(x)\sigma^2\frac {\sum\l…

RK3566 linux加入uvc app

一、集成应用 SDK中external/uvc_app/目录提供了将板卡模拟成uvc camera的功能。如果external目录下没有uvc_app和minilogger&#xff0c;可从其它sdk中拷贝。需要拷贝以下文件&#xff1a; external\uvc_app external\minilogger \buildroot\package\rockchip\uvc_app \buil…

MCM备赛笔记——图论模型

Key Concept 图论是数学的一个分支&#xff0c;专注于研究图的性质和图之间的关系。在图论中&#xff0c;图是由顶点&#xff08;或节点&#xff09;以及连接这些顶点的边&#xff08;或弧&#xff09;组成的。图论的模型广泛应用于计算机科学、通信网络、社会网络、生物信息学…

2024年阿里云优惠券和代金券领取,活动整理服务器价格表

2024阿里云优惠活动&#xff0c;免费领取阿里云优惠代金券&#xff0c;阿里云优惠活动大全和云服务器优惠价格表&#xff0c;阿里云ECS服务器优惠价99元一年起&#xff0c;轻量服务器优惠价61元一年&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云优惠券免费领取、优惠活…

【已解决】namespace “Ui“没有成员 xxx

先说笔者遇到的问题&#xff0c;我创建一个QWidget ui文件&#xff0c;然后编辑的七七八八后&#xff0c;想要用.h与.cpp调用其&#xff0c;编译通过&#xff0c;结果报了这个错误&#xff0c;本方法不是普适性&#xff0c;但是确实解决了这个鸟问题。 问题来源 搭建ui后&…

MT36291替代MT3608 FP6291 低成本 用于移动电源,蓝牙音箱,便携式设备等

航天民芯原装MT36291 SOT23-6 PIN对PIN替代FP6291LR-G1 MT3608等&#xff0c;低成本&#xff0c;用于移动电源&#xff0c;蓝牙音箱&#xff0c;便携式设备等领域。 TEL:18028786817 专注于电源管理IC 一级代理 技术支持 欢迎试样&#xff01; 描述 MT36291是一个恒定频…

位运算的奇技淫巧

常见位运算总结&#xff1a; 1、基础位运算 左移<<运算 将二进制数向左移位操作&#xff0c;高位溢出则丢弃&#xff0c;低位补0。 右移>>运算 右移位运算中&#xff0c;无符号数和有符号数的运算并不相同。对于无符号数&#xff0c;右移之后高位补0&#xff…

软件测试|Python字典的访问方式你了解吗?

简介 Python中的字典&#xff08;dictionary&#xff09;是一种非常有用的数据结构&#xff0c;它允许您存储键-值对&#xff0c;从而可以快速查找、插入和删除数据。本文将详细介绍如何访问字典中的数据&#xff0c;包括基本访问、循环遍历、使用内置方法以及处理不存在的键等…

Redis持久化和集群架构

目录 Redis持久化 RDB快照&#xff08;snapshot&#xff09; RDB优点 RDB缺点 RDB的触发机制 AOF持久化 AOF文件重写 AOF触发机制 混合模式 Redis主从架构 Redis哨兵高可用架构 Redis Cluster架构 槽位定位算法 跳转重定位 Redis集群节点间的通信机制 Redis持久化…

centos安装主从mysql集群

在 CentOS 系统上安装和配置 MySQL 主从复制环境的步骤与 Debian/Ubuntu 系统有所不同。以下是在 CentOS 系统上进行配置的详细步骤&#xff1a; 步骤 1&#xff1a;在主服务器上安装和配置 MySQL&#xff08;10.206.0.13&#xff09; 安装 MySQL 服务器: 首先&#xff0c;添加…

NeRF资料整理

文章目录 1.NeRF原理讲解2.NeRF中用到的NDC空间坐标系3.NeRF中的sample_pdf概率采样函数 1.NeRF原理讲解 nerf 原理讲解&#xff1a;这个视频对NeRF中体渲染公式的讲解和推导非常好&#xff0c;言简意赅&#xff0c;而且和论文、代码都可以对应上。 2.NeRF中用到的NDC空间坐标…

【AI】ChatGPT和文心一言那个更好用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读文章&#xff01; 此篇是【话题达人】序列文章&#xff0c;这一次的话题是《自然语言处理的发展》 文章将以博主的角度进行讲述&#xff0c;理解和水平有限&#xff0c;不足之处&#xff0c;望指正。 目录 背景自我介绍面试题…

linux 定时任务 crontab 使用笔记

最近在服务器上跑撸茅台的脚本&#xff0c;需要使用定时任务每天早上9点准时预约一次抢茅台的脚本&#xff0c;因此需要用到 crontab 命令。crontab主要是用于设置周期性执行命令&#xff0c;比如每分钟、每小时或者每周执行一个固定的命令&#xff0c;该命令从标准输入设备读取…

靶场实战(18):OSCP备考之VulnHub MY CMSMS

打靶思路 资产发现 主机发现服务发现漏洞发现&#xff08;获取权限&#xff09; 80端口/HTTP服务 组件漏洞URL漏洞3306端口/MySQL服务 组件漏洞口令漏洞80端口/HTTP服务 URL漏洞URL漏洞提升权限 www-data用户 sudosuidcron内核提权信息收集armour用户 sudo 1、资产发现 1.1…

Pytest系列(2) - assert断言详细使用

前言 与unittest不同&#xff0c;pytest使用的是python自带的assert关键字来进行断言assert关键字后面可以接一个表达式&#xff0c;只要表达式的最终结果为True&#xff0c;那么断言通过&#xff0c;用例执行成功&#xff0c;否则用例执行失败 assert小栗子 想在抛出异常之…

基于ssm+vue的宠物医院系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

01 MyBatisPlus快速入门

1. MyBatis-Plus快速入门 版本 3.5.31并非另起炉灶 , 而是MyBatis的增强 , 使用之前依然要导入MyBatis的依赖 , 且之前MyBatis的所有功能依然可以使用.局限性是仅限于单表操作, 对于多表仍需要手写 项目结构&#xff1a; 先导入依赖&#xff0c;比之前多了一个mybatis-plus…

肌营养不良患者生活质量的“提升”

肌营养不良患者基本上是生活无法自理的&#xff0c;那么作为肌营养不良患者的家属&#xff0c;提升病人的生活质量就迫在眉睫。看了这篇文章你就知道该怎么做了。 ①保持生活环境整洁 肌营养不良患者本身体质较弱&#xff0c;而且后期会卧病在床&#xff0c;为了防止并发症的发…

【机组】算术逻辑单元带进位运算实验的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《机组 | 模块单元实验》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f33a;一、 实验目…