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

这篇具有很好参考价值的文章主要介绍了算法通关村十三关 | 数组字符串加法专题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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();
    }

补充:

题目较为简单,记住模板即可。文章来源地址https://www.toymoban.com/news/detail-677232.html

到了这里,关于算法通关村十三关 | 数组字符串加法专题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法通关村第十二关——字符串反转问题解析

    字符串反转是关于字符串算法里的重要问题,虽然不是太难,但需要考虑到一些边界问题。本篇文章就对几道字符串反转题目进行分析。 力扣344题,编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,

    2024年02月10日
    浏览(43)
  • 算法通关村第十二关——不简单的字符串转换问题

    字符串是我们在日常开发中最常处理的数据,虽然它本身不是一种数据结构,但是由于其可以包含所有信息,所以通常作为数据的一种形式出现,由于不同语言创建和管理字符串的方式也各有差异,因此针对不同语言特征又产生了很多问题。 常见的字符串转换题目,也就是在

    2024年02月10日
    浏览(48)
  • 【数据结构】数组和字符串(十):稀疏矩阵的链接存储:十字链表的矩阵操作(加法、乘法、转置)

    【数据结构】数组和字符串(一):矩阵的数组表示   矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造

    2024年02月08日
    浏览(61)
  • [Go版]算法通关村第十二关黄金——字符串冲刺题

    题目链接:LeetCode-14. 最长公共前缀 以第一个子字符串为标准,遍历其每个字符时,内嵌遍历其余子字符串的对应字符是否一致。不一致时,则返回当前字符之前的子字符串。 复杂度:时间复杂度 O ( n ∗ m ) O(n*m) O ( n ∗ m ) 、空间复杂度 O ( 1 ) O(1) O ( 1 ) 时间复杂度:其中 n

    2024年02月12日
    浏览(40)
  • [Go版]算法通关村第十三关黄金——数字数学问题之数论问题(最大公约数、素数、埃氏筛、丑数)

    题目链接:LeetCode-1979. 找出数组的最大公约数 辗转相除法其核心部分为:若r 是a ÷ b的余数,则 gcd(a, b)=gcd(b, r) 题目链接:LeetCode-204. 计数质数 如果 x 是质数,那么大于 x 的 x 的倍数 2x,3x,… 一定不是质数。 时间复杂度分析: 外层循环的迭代次数是 n-2,即 O ( n ) O(n) O ( n ) 次

    2024年02月11日
    浏览(39)
  • [Go版]算法通关村第三关青铜——不简单的数组增删改查

    在golang中,切片的底层就是数组,切片是对底层数组的引用,当传递一个切片给函数时,实际上是传递了切片的引用。因此,在函数内部修改切片的内容会影响原始切片。 先声明并初始化一个长度为当前切片长度+1的切片 首部添加:将其余全部向后移动一位,然后给首位赋值

    2024年02月13日
    浏览(35)
  • 算法通关村-----数组实现加法专题问题解析

    给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。详见leetcode66 可以从数组的末尾,即length-1下标处开始向前遍历,末尾元素➕

    2024年02月10日
    浏览(48)
  • 【数据结构】数组和字符串(十四):字符串匹配1:朴素的模式匹配算法(StringMatching)

      字符串(String)是由零个或多个字符(char)顺序排列组成的有限序列,简称为串。例如 “good morning”就是由12个字符构成的一个字符串。一般把字符串记作: S = ′ ′ a 0 a 1 … a n − 1 ′ ′ S=\\\'\\\'a_{0} a_{1}…a_{n-1}\\\'\\\' S = ′′ a 0 ​ a 1 ​ … a n − 1 ′′ ​   其中S是串名,引号中

    2024年02月05日
    浏览(73)
  • 力扣热门算法题 349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码

    349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码,每题做详细思路梳理,配套PythonJava双语代码, 2024.04.02 可通过leetcode所有测试用例。 目录 349. 两个数组的交集 解题思路 完整代码 Python Java 387. 字符串中的第一个唯一字符 解题思路 完整代码 Python Java

    2024年04月08日
    浏览(43)
  • 带你刷算法——数组/字符串的完全掌握(一)

    「作者主页」 :雪碧有白泡泡 「个人网站」 :雪碧的个人网站 「推荐专栏」 : ★ java一站式服务 ★ ★ 前端炫酷代码分享 ★ ★ uniapp-从构建到提升 ★ ★ 从0到英雄,vue成神之路 ★ ★ 解决算法,一个专栏就够了 ★ ★ 架构咱们从0说 ★ ★ 数据流通的精妙之道★ 给你两个

    2024年02月13日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包