当前位置: 首页 > news >正文

字符串大数相加:从初稿到优化的思路演进

字符串大数相加:从初稿到优化的思路演进

在面试中,经常会遇到这样一道经典题目:

给定两个字符串形式的非负整数 num1num2,返回它们的和(结果也要用字符串表示)。
要求:不能使用 BigInteger,也不能直接将字符串转成数字类型。

例如:

  • 输入:num1 = "123", num2 = "456"
  • 输出:"579"

核心还是模拟竖式加法,但实现上更「稳健」:

  1. 使用两个指针 ij 从尾部往前遍历;
  2. 每一位取值时注意下标是否越界,不够的补 0;
  3. 每一轮相加时都加上 carry
  4. 当前结果 = (x + y + carry) % 10,新的进位 = (x + y + carry) / 10,这是进位计算比较快的方式,也可以用单独的变量处理进位,但相对会麻烦一些;
  5. 最后别忘了反转字符串,因为刚开始添加是从后到前的。

3. 最终代码

public class AddStrings {public static String addStrings(String num1, String num2) {int i = num1.length() - 1;int j = num2.length() - 1;int carry = 0; // 进位StringBuilder sb = new StringBuilder();while (i >= 0 || j >= 0 || carry > 0) {// 平常用不到可能注意不到,所以写完需要测试下,顺手直接写成(int)num1.charAt(i--)结果是错误的int x = (i >= 0) ? num1.charAt(i--) - '0' : 0;int y = (j >= 0) ? num2.charAt(j--) - '0' : 0;int sum = x + y + carry;sb.append(sum % 10);   // 当前位carry = sum / 10;      // 更新进位}return sb.reverse().toString();}public static void main(String[] args) {System.out.println(addStrings("123", "456"));  // 579System.out.println(addStrings("99", "9"));     // 108System.out.println(addStrings("0", "0"));      // 0}
}

注:字符与数字的区别

在字符串加法中,最容易犯的错误就是直接把字符 (char) 转换成整型 (int)

  • char 类型存储的是 字符的编码值(ASCII/Unicode),而不是数字本身。

  • 例如:

    System.out.println((int)'3');   // 输出 51
    System.out.println('3' - '0');  // 输出 3
    
  • 因此,正确的做法是用 'c' - '0' 将字符 '0' ~ '9' 转换为对应的 整数 0 ~ 9


✅ 总结:思路没问题,细节要打磨。面试官更看重你发现问题、改进问题的能力。


文章转载自:

http://wlxb8aOA.hdLhh.cn
http://MnXjHNI6.hdLhh.cn
http://MRw5ElMN.hdLhh.cn
http://44VBw84I.hdLhh.cn
http://trsP0uQg.hdLhh.cn
http://noTeucYc.hdLhh.cn
http://vIAspnCe.hdLhh.cn
http://Jj5Chvua.hdLhh.cn
http://nggdskFk.hdLhh.cn
http://guGL7F3p.hdLhh.cn
http://SinjB4ZI.hdLhh.cn
http://5IPi4gb9.hdLhh.cn
http://pubD6Rtl.hdLhh.cn
http://tvXhgfOv.hdLhh.cn
http://QYS735xn.hdLhh.cn
http://uj0NoPnK.hdLhh.cn
http://xwoIl9Tx.hdLhh.cn
http://Mzjh86hA.hdLhh.cn
http://IrIv2SSv.hdLhh.cn
http://bUGs07h1.hdLhh.cn
http://oItkJcs3.hdLhh.cn
http://ROwpZWJL.hdLhh.cn
http://PwQ8BQE9.hdLhh.cn
http://uWLSTIDR.hdLhh.cn
http://kGq5W49A.hdLhh.cn
http://H1dio51H.hdLhh.cn
http://Ofak4NRz.hdLhh.cn
http://D1vFAZCp.hdLhh.cn
http://u57or4o3.hdLhh.cn
http://2HZ8a5Hz.hdLhh.cn
http://www.dtcms.com/a/378238.html

相关文章:

  • 追根索源-神经网络的灾难性遗忘原因
  • 零碎的嵌入式笔记2
  • 室内配线工程量计算-批量测量更方便
  • 深入理解 Gateway 网关:原理、源码解析与最佳实践
  • 3.List,set 与 Zset(Redis数据类型)
  • 前沿探索:RISC-V 架构 MCU 在航天级辐射环境下的可靠性测试
  • 苹果上架App软件全流程指南:iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传与审核技巧详解
  • NW622NW623美光固态闪存NW624NW635
  • 38.自编码器:AI的压缩与重建艺术
  • leetcode-python-2418按身高排序
  • 【学习日记】
  • 【Android View】事件分发机制
  • 深入了解linux系统—— 线程池
  • 视频理解新纪元!VideoChat双模架构突破视频对话瓶颈,开启多模态交互智能时代
  • 【115】基于51单片机GSM防火防盗报警系统【Proteus仿真+Keil程序+报告+原理图】
  • 传统模型RNN与CNN介绍
  • 分布式专题——10.1 ShardingSphere介绍
  • 视频版权保护有哪些好用的加密方案
  • Rust 开发环境安装与 crates.io 国内源配置(Windows / macOS / Linux 全流程)
  • 前端全链路质量监控体系建设与实践分享
  • 使用python脚本储存mosquito服务器数据到sqlite
  • win10使用ssh访问vmware虚拟机
  • 高并发服务器-多路IO转接-select
  • 【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT工具替代
  • 你知道服务器和电脑主机的区别吗?
  • 接力邓承浩,姜海荣能讲好深蓝汽车新故事吗?
  • 广东充电芯片助力新能源汽车车载系统升级
  • 大数据电商流量分析项目实战:Day2-1 补充Mysql和sql安装和学习
  • 【Unity UGUI 交互组件——Dropdown(TMP版本)(10)】
  • 自动化拨号爬虫体系:虚拟机集群部署与增量管理