算法通关村十三关 | 数组字符串加法专题

news2024/9/24 21:22:24

1. 数组实现整数加法

题目:LeetCode66,66. 加一 - 力扣(LeetCode)

思路

我们只需要从头到尾依次运算,用常量标记是否进位,需要考虑的特殊情况是digits = [9,9,9]的时候进位,我们组要创建长度加1的数组,首位添加为1即可。

代码

    /**
     * 数组实现整数加法
     * 需要考虑999+1变成1000,解决方法创建个新数组,首位补1
     */
    public static int[] plusOne(int[] digits) {
        int len = digits.length;
        //从末尾向前计算
        for (int i = len - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] %= 10;
            //加1之后对10取余不等于0则没有进位,直接返回
            //如果有进位,循环再次执行++,
            if (digits[i] != 0)
                return digits;
        }

        //三位数都有进位,999-1000,创建新数组,首位等于1
        digits = new int[len + 1];
        digits[0] = 1;
        return digits;
    }

2. 字符串实现加法

题目

        给定两个非负形式的字符串num1和num2,计算他们的和以字符串形式返回,不能使用Javaapi

思路

        还是竖式计算,从后往前,如果当前位置超过10,则发生进位,用两个指针分别从两数的末尾向前移动,遇到数字位数不同,只需补0继续和另一位数字运算。

代码

    /**
     * 字符串加法,竖式加法,需要判断是否进位。可以用变量来存储每次进位的值
     */
    public static String addStrings(String num1, String num2) {
        int i = num1.length() - 1, j = num2.length() - 1, add = 0;
        StringBuilder sb = new StringBuilder();
        //位数不同,补0计算
        while (i >= 0 || j >= 0 || add != 0) {
            int x = i >= 0 ? num1.charAt(i) - '0' : 0;
            int y = j >= 0 ? num2.charAt(i) - '0' : 0;
            int result = x + y + add;
            //先拼接余数
            sb.append(result % 10);
            //再计算是否进位
            add = result / 10;
            i--;
            j--;
        }
        sb.reverse();
        return sb.toString();
    }

3. 二进制加法

题目

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

思路

        二进制加法同上题一样,只不过进位变了,满2进1,同时也要处理出现首位继续向前进位的现象,可以用最后在前方拼接进位,不进位则不用拼接。

代码

    /**
     * 二进制的加法
     * 同字符串加法思想一样,是满2进1,换种形式写代码
     */

    public static String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        //是否进位的变量
        int ca = 0;
        for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
            int sum = ca;
            sum += i >= 0 ? a.charAt(i) - '0' : 0;
            sum += j >= 0 ? b.charAt(j) - '0' : 0;
            sb.append(sum % 2);
            ca = sum / 2;
        }
        //处理最后一位
        sb.append(ca == 1 ? ca : "");
        return sb.reverse().toString();
    }

补充:

题目较为简单,记住模板即可。

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

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

相关文章

JCTools Mpsc源码详解(二) MpscArrayQueue

MpscArrayQueue是一个固定大小的环形数组队列,继承自ConcurrentCircularArrayQueue MpscArrayQueue的特点: 环形队列底层数据结构为数组有界 看一下MpscArrayQueue的属性(填充类除外)--- //生产者索引 private volatile long producerIndex; //生产者边界 private volatile…

NSSCTF——Web题目1

目录 一、[LitCTF 2023]PHP是世界上最好的语言!! 二、[LitCTF 2023]Ping 三、[SWPUCTF 2021 新生赛]easyupload1.0 四、[SWPUCTF 2021 新生赛]easyupload2.0 五、[SWPUCTF 2021 新生赛]caidao 一、[LitCTF 2023]PHP是世界上最好的语言!&a…

QA3

1. file_name.split(.)[0] 这是什么意思? 这行代码是将文件名按照点(.)进行分割,并返回分割后的列表中的第一个元素。在许多编程语言中,点通常用作文件名和扩展名之间的分隔符。通过使用split(.)函数,我们…

什么是 API ?

一、API 的定义:数据共享模式定义 4 大种类 作为互联网从业人员,API 这个词我耳朵都听起茧子了,那么 API 究竟是什么呢? API 即应用程序接口(API:Application Program Interface),…

AI 绘画Stable Diffusion 研究(十六)SD Hypernetwork详解

大家好,我是风雨无阻。 本期内容: 什么是 Hypernetwork?Hypernetwork 与其他模型的区别?Hypernetwork 原理Hypernetwork 如何下载安装?Hypernetwork 如何使用? 在上一篇文章中,我们详细介绍了 …

如何开发小程序 3 个月赚 6.18 元

前言 随着 Ai 的崛起,开发者的就业也越来越困难,好像疫情放开后整个世界都变了,全球都在经历经济下行的压力。那么作为个人开发者如何在工作之余获取额外收入呢?笔者也是个一般开发者,没有牛逼的技术实力,…

rust交叉编译 在mac下编译linux和windows

系统版本macbook proVentura 13.5linux ubuntu22.04.3 LTS/18.04.6 LTSwindowswindows 10 专业版 20H2mac下rustc --versionrustc 1.74.0-nightly (58eefc33a 2023-08-24)查看当前系统支持的交叉编译指定系统版本列表 rustup target list如果已经安装这里会显示(installed)。…

Zuul:路由网关

话不多说上实战 先建一个子模块 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://m…

深入浅出AXI4协议(1)——概述

写在前面 从这篇文章开始&#xff0c;我们将正式进入AXI4协议的学习&#xff0c;在xilinx系列的FPGA中&#xff0c;AXI4协议的使用是非常广泛的&#xff0c;很多的IP核都会支持AXI接口&#xff0c;而如果使用的是zynq系列&#xff0c;那AXI协议的学习更是重中之重。但是作为一款…

Weblogic漏洞(一)之 Weblogic基本介绍

Weblogic基本介绍 WebLogic是美国Oracle公司出品的一个application server&#xff0c;确切的说是一个基于JAVAEE架构的中间件&#xff0c;WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise…

【数据结构】 栈(Stack)的应用场景

文章目录 &#x1f30f;前言&#x1f340;改变元素的序列&#x1f6a9;场景一&#x1f4cc;解析&#xff1a; &#x1f6a9;场景二&#x1f4cc;解析&#xff1a; &#x1f38d;将递归转化为循环&#x1f333;[括号匹配](https://leetcode.cn/problems/valid-parentheses/)&…

指针-C语言(初阶)

目录 一、什么是指针 二、指针和指针类型 2.1 指针-整数 2.2 指针的解引用 三、野指针 3.1 野指针形成原因 3.2 如何规避野指针 四、指针运算 4.1 指针-整数 4.2 指针-指针 4.3 指针的关系运算 五、指针和数组 六、二级指针 七、指针数组 一、什么是指针 指针是内存中一个…

k-近邻算法概述,k-means与k-NN的区别对比

目录 k-近邻算法概述 k-近邻算法细节 k值的选取 分类器的决策 k-means与k-NN的区别对比 k-近邻算法概述 k近邻&#xff08;k-nearest neighbor, k-NN&#xff09;算法由 Cover 和 Hart 于1968年提出&#xff0c;是一种简单的分类方法。通俗来说&#xff0c;就是给定一个…

Linux操作系统--网络配置(2)

在上一次课程中,我们对Linux课程中的网络有了一个了解,下面我们来看看如何配置网络IP。 1.配置网络IP地址 在Linux操作系统中,比如搭建集群,这一个时候如果使用DHCP实现动态IP的分配,那么如果需要访问管理其中一个节点操作时候,就需要通过其IP访问。这一个时候还得去查看…

十五、systemctl命令如何使用?

在Linux系统中&#xff0c;一些内置服务可以通过systemctl控制&#xff0c;部分第三方软件也可以通过systemctl控制。 1、基础语法 start&#xff1a;开启服务&#xff1b; stop&#xff1a;关闭服务&#xff1b; status&#xff1a;查看服务当前状态&#xff1b; enable&a…

【推荐】Spring与Mybatis集成整合

目录 1.概述 2.集成 2.1代码演示&#xff1a; 3.整合 3.1概述 3.2 进行整合分页 接着上两篇&#xff0c;我已经写了Mybatis动态之灵活使用&#xff0c;mybatis的分页和特殊字符的使用方式接下来把它们集成起来&#xff0c;是如何的呢&#x1f447;&#x1f447;&#x1…

Stm32的时钟系统以及使用SysTick滴答定时器实现延时

前言 STM32的时钟系统由多个时钟源和时钟树组成时钟源包括主时钟源&#xff08;HSE&#xff09;、内部高速时钟源&#xff08;HSI&#xff09;、内部低速时钟源&#xff08;LSI&#xff09;和外部低速时钟源&#xff08;LSE&#xff09;。时钟树由多个时钟分频器和时钟门控器组…

五、多表查询-2.概述分类

一、多表查询概述 二、演示 1、准备数据 &#xff08;1&#xff09;创建emp1表并注入数据&#xff0c;添加外键&#xff1a; 2、多表查询 一共 102条数据&#xff1a;17个员工&#xff0c;6个部门&#xff0c;176102 3、消除笛卡尔积 一共16条记录&#xff1a; 为啥17个员工&…

Aos插件实现滚动动画效果

aos文档 aos使用感受跟wow相似&#xff0c;但比wow多了浏览器回滚&#xff0c;动画效果会再次展现 安装 npm install aos使用 main.js全局导入css import aos/dist/aos.cssvue文件 <template><div class"box"><div class"code" v-for&q…

Java接收json参数

JSON 并不是唯一能够实现在互联网中传输数据的方式&#xff0c;除此之外还有一种 XML 格式。JSON 和 XML 能够执行许多相同的任务&#xff0c;那么我们为什么要使用 JSON&#xff0c;而不是 XML 呢&#xff1f; 之所以使用 JSON&#xff0c;最主要的原因是 JavaScript。众所周知…