前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >原来字节跳动也不会大数加法,抖音点赞直接点爆了。

原来字节跳动也不会大数加法,抖音点赞直接点爆了。

作者头像
数据结构和算法
发布2025-01-16 15:27:18
发布2025-01-16 15:27:18
5500
代码可运行
举报
运行总次数:0
代码可运行

精品推荐

《征服数据结构》专栏:50多种数据结构彻底征服

《经典图论算法》专栏:50多种经典图论算法全部掌握

最近有一位明星挺火的,因为在他的直播间送车,导致很多人到他直播间观看,在线人数已经超过了10万,具体有多少人看过就不知道了,但点赞人数直接超出了 int 的最大值,溢出了,变成了负数 -1669450377 。

我们知道抖音属于字节旗下的,而字节一直以来因为喜欢面试算法难题,被网友调侃为宇宙条。所以这种低级错误实在是不应该犯,解决方式也很简单,一种就是把 int 类型变成 long 类型(C++中可以换成long long),还一种方式就是使用字符串,先不考虑性能的问题,下面我们来看下使用字符串两个数是怎么相加的。

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第415题:字符串相加。

问题描述

来源:LeetCode第415题

难度:中等

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例1:

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

示例2:

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

  • 1 <= num1.length, num2.length <= 10^4
  • num1 和num2 都只包含数字 0-9
  • num1 和num2 都不包含任何前导零

问题分析

我们知道加法是从个位加起的,我们可以使用两个指针,刚开始的时候两个指针分别指向两个字符串最右边的字符。还要使用一个变量carry来记录进位的值,因为两个数相加最多只能进一位,所以carry要么是 0 要么是 1 。

如果某一位没有数字我们就默认它是 0 ,如下图所示,第一个数字的千位是 2 ,而第二个数字只有两位数,我们就默认它的千位是 0 ,就这样相加。因为是从个位相加,最后还需要把相加的结果进行反转即可。

JAVA:

代码语言:javascript
代码运行次数:0
复制
public String addStrings(String num1, String num2) {
    StringBuilder s = new StringBuilder();
    int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
    while (i >= 0 || j >= 0 || carry != 0) {
        int x = i < 0 ? 0 : num1.charAt(i--) - '0';
        int y = j < 0 ? 0 : num2.charAt(j--) - '0';
        int sum = x + y + carry;
        s.append(sum % 10);// 添加到字符串尾部
        carry = sum / 10;
    }
    return s.reverse().toString();//对字符串反转
}

C++:

代码语言:javascript
代码运行次数:0
复制
public:
    string addStrings(string num1, string num2) {
        string s;
        int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
        while (i >= 0 || j >= 0 || carry != 0) {
            int x = i < 0 ? 0 : num1[i--] - '0';
            int y = j < 0 ? 0 : num2[j--] - '0';
            int sum = x + y + carry;
            s += to_string(sum % 10);// 添加到字符串尾部
            carry = sum / 10;
        }
        reverse(s.begin(), s.end());// 对字符串反转
        return s;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据结构和算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档