数字与数学高频问题(算法村第十三关白银挑战)

news2024/11/18 4:35:21

数组实现加法专题

数组实现整数加法

66. 加一 - 力扣(LeetCode)

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321

示例 3:

输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
解一
public int[] plusOne(int[] digits)
{
    for (int i = digits.length - 1; i >= 0 ; i--)
    {
        //若某一位加一后不会产生进位,则该位加一后直接返回
        if(digits[i] != 9)
        {
            digits[i]++;
            return digits;
        }

        //发生进位,低位归零
        digits[i] = 0;
    }

    //进位发生在最高位:99999999
    int[] ans = new int[digits.length + 1];
    ans[0] = 1;
    return ans;
}
解二
public int[] plusOne(int[] digits)
{
    for (int i = digits.length - 1; i >= 0 ; i--)
    {
        digits[i]++;
        //计算低位
        digits[i] = digits[i] % 10;
        //加一后不出现进位,直接返回
        if(digits[i] != 0)
            return digits;
    }

    //进位发生在最高位:99999999
    int[] ans = new int[digits.length + 1];
    ans[0] = 1;
    return ans;
}

字符串相加

415. 字符串相加 - 力扣(LeetCode)

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"

示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"

提示:

  • 1 <= num1.length, num2.length <= 104
  • num1num2 都只包含数字 0-9
  • num1num2 都不包含任何前导零
StringBuilder + 位数不同就补零
public String addStrings(String num1, String num2)
{
    int i = num1.length() - 1;
    int j = num2.length() - 1;
    int carry = 0;  //进位
    StringBuilder ans = new StringBuilder();

    while (i >= 0 || j >= 0 || carry == 1)
    {
        int x = i >= 0 ? num1.charAt(i) - '0' : 0;
        int y = j >= 0 ? num2.charAt(j) - '0' : 0;

        int curSum = x + y + carry;
        ans.append(curSum % 10);    //先把低位相加的结果放在前面
        carry = curSum / 10;

        i--;
        j--;
    }

    //反转:高位在前,低位在后。然后StringBuilder类型转为字符串类型再返回
    return ans.reverse().toString();
}

二进制求和

67. 二进制求和 - 力扣(LeetCode)

给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

示例 1:

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

示例 2:

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

提示:

  • 1 <= a.length, b.length <= 104
  • ab 仅由字符 '0''1' 组成
  • 字符串如果不是 "0" ,就不含前导零

把求余和整除换成2即可

public String addBinary(String a, String b)
{
    int i = a.length() - 1;
    int j = b.length() - 1;
    int carry = 0;  //进位
    StringBuilder ans = new StringBuilder();

    while (i >= 0 || j >= 0 || carry == 1)
    {
        int x = i >= 0 ? a.charAt(i) - '0' : 0;
        int y = j >= 0 ? b.charAt(j) - '0' : 0;

        int curSum = x + y + carry;
        ans.append(curSum % 2);    //先把低位相加的结果放在前面
        carry = curSum / 2;

        i--;
        j--;
    }

    //反转:高位在前,低位在后。然后StringBuilder类型转为字符串类型再返回
    return ans.reverse().toString();
}

幂运算

2 的幂

231. 2 的幂 - 力扣(LeetCode)

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方

提示:

  • -2^31 <= n <= 2^31 - 1

**进阶:**你能够不使用循环/递归解决此问题吗?

循环一
public boolean isPowerOfTwo(int n)
{
    //负数和0不可能是2的幂次方
    if (n <= 0)
        return false;

    for (int i = 0; Math.pow(2, i) < Integer.MAX_VALUE; i++)
    {
        if(n == Math.pow(2, i))
            return true;
    }

    return false;
}
循环二

2的幂次方的特点:整除2后是偶数,不断整除2的结果是1

这个方法比循环一要高效

public boolean isPowerOfTwo_3(int n)
{
    if (n <= 0)
        return false;

    while (n % 2 == 0)
        n = n / 2;

    return n == 1;
}
位运算

正整数 n 是 2 的幂,当且仅当 n 的二进制表示中只有最高位是 1,其余位都是 0

public boolean isPowerOfTwo(int n)
{
    //n & (n - 1)的作用是消除 n 的二进制表示中最低位的1
    //如果 n 是2的幂次方,那 n 的二进制表示中只有最高位为1
    //除去1后,结果应该为零,否则就不是2的幂次方
    return n > 0 && ((n & (n - 1)) == 0);
}

3 的幂

326. 3 的幂 - 力扣(LeetCode)

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

循环
public boolean isPowerOfThree(int n)
{
    if (n <= 0)
        return false;

    while (n % 3 == 0)
        n = n / 3;

    return n == 1;
}
一步到位

如果n是3的幂次方,则整型范围内n一定是最大的3的幂次方的除数

public boolean isPowerOfThree(int n)
{
    // 1162261467 is the largest power of 3
    return (n > 0) && (1162261467 % n == 0);
}

4的幂

342. 4的幂 - 力扣(LeetCode)

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x

循环
public boolean isPowerOfThree(int n)
{
    if (n <= 0)
        return false;

    while (n % 4 == 0)
        n = n / 4;

    return n == 1;
}
位运算

在这里插入图片描述

同余符号 ≡:在数论中使用,表示两个整数除以同一个数后余数相等。例如,a ≡ b (mod m)表示ab除以m后有相同的余数。

由于

4 ≡ 1 ( mod 3)

4^2 ≡ 1^2 ≡ 1 ( mod 3)

4^3 ≡ 1^3 ≡ 1 ( mod 3)

以此类推,可以得出对于任何整数4^x ≡ 1 ( mod 3)

public boolean isPowerOfFour(int n)
{
    //若n是4的幂次方,则n一定是2的幂次方
    return n > 0 && (n & (n - 1)) == 0 && n % 3 == 1;
}

更多题目

50. Pow(x, n) - 力扣(LeetCode)

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

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

相关文章

【刷题】 leetcode 面试题 01.06 字符串压缩

字符串压缩 字符串压缩思路一&#xff08;双指针顺畅版&#xff09;思路二&#xff08;sprintf函数巧解版&#xff09; Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读下一篇文章见&#xff01;&#xff01;&#xff01; 字符串压缩 来看题目&#xff1a; 根据题目…

OpenCV第 2 课 OpenCV 环境搭建

文章目录 第 2 课 OpenCV 环境搭建1.安装 Numpy2.从 Ubuntu 存储库安装 OpenCV3.验证 OpenCV 安装 第 2 课 OpenCV 环境搭建 1.安装 Numpy 每一张图像都有很多个像素点&#xff0c;这也导致了程序中会涉及大量的数组处理。Numpy 是一个 Python 的拓展库&#xff0c;它对多维数…

Linux环境docker安装Neo4j,以及Neo4j新手入门教学(超详细版本)

目录 1、 图数据库Neo4j简介1.1 什么是图数据库1.2 能解决什么痛点1.3 对比关系型数据库1.4 什么是Neo4j1.5 Neo4j的构建元素 2. 环境搭建2.1 安装Neo4j Community Server2.2 docker 安装Neo4j Community Server2.3 Neo4j Desktop安装 3. Neo4j - CQL使用3.1 Neo4j - CQL简介3.…

C++模板与STL【常用算法】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f384;1 STL常用算法&#x1f3c6;1.1 常用遍历算法&#x1f349;1.1.1 for_each&#x1f349;1.1.2 transform &#x1f3c6;1.2 常用查找算法&#x1f34b;1.2.1 f…

STL第二讲

第二讲 视频标准库源码版本&#xff1a;gnu c 2.9.1/4.9/Visual C OOP vs GP GP是将datas与methods分开&#xff0c;OOP相反&#xff1b; 为什么list不能使用全局的sort&#xff1f; 因为sort源代码&#xff1a; *(first (last - first)/2) // 此迭代器只能是随机访问迭代…

C语言快速排序(非递归)图文详解

前言&#xff1a; 上一期分析了快速排序的三种写法&#xff0c;这三种写法有一个相同点&#xff0c;都是采用递归形式来实现的&#xff0c;那么有没有非递归的方法实现呢&#xff1f;答案是当然有&#xff0c;用非递归的方法实现快速排序&#xff0c;其实可以借助数据结构中的栈…

C++笔记(二)

函数的默认参数 如果我们自己传入数据&#xff0c;就用自己的数据&#xff0c;如果没有&#xff0c;就用默认值 语法&#xff1a; 返回值类型 函数名&#xff08;形参默认值&#xff09;{} int func&#xff08;int a&#xff0c;int b20&#xff0c;int c30&#xff09;{} …

HTTP与HTTPS的工作流程

HTTP与HTTPS的工作流程 http知识点回顾1、HTTP访问的过程2、HTTP常见状态码3、HTTP 协议一共五大特点 https的工作流程1、对称加密2、非对称加密3、https工作流程 http知识点回顾 1、HTTP访问的过程 &#xff08;1&#xff09;解析url&#xff0c;获取 url 中包含的域名&…

Unity3D Pico VR 手势识别物体交互 适配 MRTK3

当前Pico已经支持手势识别了&#xff0c;但是提供的PICO Unity Integration SDK 中是没有手势和物体交互的功能&#xff0c;Unity XR Interaction Toolkit提供的手势识别物体交互对 Quest适配的挺好的&#xff0c;Pico 当前只能用指尖点触还不能对物体进行抓握以及手势控制射线…

仅使用 Python 创建的 Web 应用程序(前端版本)第05章_共通代码

前面介绍了很多,但是让我们从本章开始实现 WTS。 在本章中,我们将实现所有页面的公共部分:SessionManager、MockDB、Model 和 Application。 SessionManger 与 Streamlit 会话交互。 在WTS中,我们的目标是使代码清晰,SessionManager负责读写st.session_state数据。 Mock…

数据结构:3_栈和队列

栈和队列 一.栈 1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。**栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#x…

【QML-Qt Design Studio】

QML编程指南 ■ Qt Design Studio &#xff08;Qt Quick UI设计工具&#xff09;■ 安装Qt Design Studio■ ■ Qt Design Studio &#xff08;Qt Quick UI设计工具&#xff09; Qt Design Studio是一个用于创建酷炫、优美UI的工具。 简单概括其功能就是让UI设计转换为qml&…

uniapp+vue3+ts--编写微信小程序对接e签宝签署时跳转刷脸效果(人脸识别)中间页代码

uniappvue3ts–编写微信小程序对接e签宝签署时跳转刷脸效果&#xff08;人脸识别&#xff09;中间页代码 e签宝内嵌H5方式集成签署页的文档说明&#xff1a;https://open.esign.cn/doc/opendoc/case3/ahb0sg 签署时跳转刷脸效果示意图&#xff1a; 1. 在文件夹新建一个文件&a…

java基础:有序数组中插入数字使其依然有序案例分析

问题目标是将用户输入的整数插入到一个已排序的数组中&#xff0c;以保持数组的有序性。 如何实现&#xff1f; 思路分析&#xff1a; 初始化已排序的数组&#xff1a;通过使用int[] arr {1, 2, 3, 4, 5, 6};语句创建一个已经排好序的数组。定义变量&#xff1a;index用于记…

2024年制造业展望

制造业是国民经济的主体&#xff0c;其重要性不言而喻。就2023年而言&#xff0c;制造业在技术创新、数字化转型和可持续发展方面都取得了重要的进展。以下是对于2024年制造业的发展进行的分析与预测。 1 保持业务平衡仍将是一项挑战 在过去的四年里&#xff0c;制造业高管人…

【IEEE会议征稿】2024年第九届智能计算与信号处理国际学术会议(ICSP 2024)

2024年第九届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09; 2024年第八届智能计算与信号处理国际学术会议&#xff08;ICSP 2024&#xff09;将在西安举行&#xff0c; 会期是2024年4月19-21日&#xff0c; 为期三天, 会议由西安科技大学主办。 欢迎参会&…

Django开发_17_表单类

一、介绍 为了简化前端form表单代码 二、步骤 &#xff08;一&#xff09;创建form.py 创建一个表单类 from django import formsclass RegisterForm(forms.Form):reg_name forms.CharField(max_length10, label用户名)reg_pwd forms.CharField(max_length20, label密码…

【Pandora Next Notebook】

系列文章目录 一是为了说一说这个项目&#xff0c;第二点是为了介绍一下如何使用大善人Cloudflare的功能来配合v0.5.0的新功能。它就是全代理ChatXXX账号注册流程。 文章目录 系列文章目录前言一、[GPT_BOT](https://chat.oaifree.com/)这次借着v0.5.0发布了一个好玩的功能&…

配网故障定位装置:实现高效故障排查的利器

在现代社会&#xff0c;电力系统的稳定运行对于国家经济和民生至关重要。然而&#xff0c;随着电力系统的不断发展&#xff0c;配网故障问题日益严重&#xff0c;给电力系统带来了巨大的安全隐患。为了解决这一问题&#xff0c;恒峰智慧科技研发了一种基于成熟的行波测距技术的…

Vue+OpenLayers7:html原生网页如何使用OpenLayers7地图

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 尽管现在大部分网页都是使用Vue或者React开发了,但是还是有不少开发者使用的是网页原生html进行开发,或者是老项目维护的需要,所以为了照顾使用html原生网页的同学们,本章简单讲解一下如何使用原始html网页情况下…