构站网做建材的哪些网站
构站网,做建材的哪些网站,网站建设制作价格低分类信息,政务门户网站建设信息文章目录1.问题描述2.代码详情1.问题描述
给定两个字符串形式的非负整数 num1 和num2 #xff0c;计算它们的和。
注意#xff1a; num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库计算它们的和。
注意 num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库 也不能直接将输入的字符串转换为整数形式。
2.代码详情
解题思路 算法流程 设定 ij 两指针分别指向 num1num2 尾部模拟人工加法 计算进位 计算 carry tmp // 10代表当前位相加是否产生进位 添加当前位 计算 tmp n1 n2 carry并将当前位 tmp % 10 添加至 res 头部 索引溢出处理 当指针 i或j 走过数字首部后给 n1n2 赋值为 00相当于给 num1num2 中长度较短的数字前面填 00以便后续计算。 当遍历完 num1num2 后跳出循环并根据 carry 值决定是否在头部添加进位 11最终返回 res 即可。
复杂度分析 时间复杂度 O(max(M,N))O(max(M,N))其中 MMNN 为 22 数字长度按位遍历一遍数字以较长的数字为准 空间复杂度 O(1)O(1)指针与变量使用常数大小空间。
java
package com.fanxindong.String;public class AddString {public String addStrings(String num1, String num2) {StringBuilder res new StringBuilder();int i num1.length() - 1, j num2.length() - 1, carry 0;while(i 0 || j 0){int n1 i 0 ? num1.charAt(i) - 0 : 0;int n2 j 0 ? num2.charAt(j) - 0 : 0;int tmp n1 n2 carry;carry tmp / 10;res.append(tmp % 10);i--; j--;}if(carry 1) res.append(1);return res.reverse().toString();}public static void main(String[] args) {String num1 123456;String num2 123456;AddString addString new AddString();String result addString.addStrings(num1,num2);System.out.println(result);}
}
python
class Solution():def addStrings(self,num1: str, num2: str) - str:res i, j, carry len(num1) - 1, len(num2) - 1, 0while i 0 or j 0:n1 int(num1[i]) if i 0 else 0n2 int(num2[j]) if j 0 else 0tmp n1 n2 carrycarry tmp // 10res str(tmp % 10) resi, j i - 1, j - 1return 1 res if carry else resif __name__ __main__:S Solution()num1 51189num2 967895result S.addStrings(num1,num2)print(result)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88572.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!