网站首页 > java教程 正文
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。
如果有任何问题可以在文章后评论或者私信给我。
如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。
持续分享,敬请关注。
LeetCode 415. 数字字符串加法(Add Strings)
问题描述:
给定两个整数的字符串形式num1和num2, 返回 num1+num2的结果的字符串形式。
注:
- num1和num2的长度都小于5100;
- num1和num2只包含数字0-9;
- num1和num2不包含任何前导零;
- 不使用任何内置的BigInteger库不要将输入直接转换为整数;
C语言实现:
这个问题很简单。
传统的解决思路是用ASCII码。说实话我也没什么太好的办法。
首先定义一个字符数组res用来保存结果,长度是strlen(num1)+2,因为strlen的返回值是不包括'\0'的,但是我们要考虑,此外因为加法存在进位问题,比如9+1=10,即结果可能比num1或num2多一位。
定义整型变量carry用来保存加的过程中某一步的进位值,没有进位的化,它的值是0,否则是1。
我们从右向左同时遍历num1和num2:
同一位相加再加上carry,注意因为是字符,所以结果还要与字符'0'取余,这样得到的结果我们记为s,s就是这一位相加的整数结果。但是我们在res中保存的同然是数值字符,所以我们要对s做进一步处理:
- s%10就是加后的除去进位后,这一位留下的数字,我们要将其转化成字符,仅仅需要再加上'0'即可。
- s/10就是是否进位的结果,如果s大于等于10,说明有进位,那么结果就是1,否则是0。将其保存到carry中,我们知道下一位的计算中会用到。
如此下去,直到遍历结束。
如果这个时候carry的值为0,说明num1加num2的结果得到的数字长度和num1或num2一致,那么到这里计算结束了,由于我们申请res的长度,多申请了一位,那么返回结果应该是res+1。
如果这个时候carry的值为1,说明最后有进位,需要将res[0]赋值为'1',然后返回res。
最后代码如下:
Java语言实现:
Java 的实现和C语言的实现一致,不再撰述。
代码如下:
Python语言实现:
Python 的实现思路和C语言的基本一致,不再撰述。
代码如下:
- 上一篇: Java中如何将字符串转换为的int?
- 下一篇: java数字转人民币大写源码
猜你喜欢
- 2024-11-27 零基础学习JAVA-05.字符串
- 2024-11-27 【Java编程】String类的创建和操作
- 2024-11-27 Java源码系列-Integer源码
- 2024-11-27 JAVA技术分享:单号的生成
- 2024-11-27 LeetCode每日一题,最长回文子串
- 2024-11-27 java-常用加解密算法-Base64和UrlBase64
- 2024-11-27 你不可不会的几种移动零的方法
- 2024-11-27 LeetCode每日一题,整数转罗马数字
- 2024-11-27 JAVA进阶知识练习题(下)
- 2024-11-27 「教3妹学算法-每日3题(1)」字符串中第二大的数字
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)