- 设计思想:
-视频讲解链接B站视频讲解
- 复杂度分析:
- 代码:
c++版本:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
int len_i = s.size()- 1;
int len_j = t.size() -1;
if(len_i < len_j) swap(s,t),swap(len_i,len_j);//如果字符串s的长度比字符串t的长度小就交换
int temp = 0;//用来就当前这一位的加和
int carry = 0;//保存进位
int c = len_i - len_j;
while(c > 0){
t = '0' + t;
c --;
}
for(int i = len_i;i >= 0;i --){
temp = s[i] - '0' + t[i] - '0' + carry;
if(temp >= 10){
temp -= 10;
carry = 1;
}else{
carry = 0;
}
s[i] = temp + '0';
}
//99 + 1
if(carry == 1){
s = '1' + s;
}
return s;
}
};
Java版本:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
int len_i = s.length()- 1;
int len_j = t.length() -1;
if(len_i < len_j) {
//如果字符串s的长度比字符串t的长度小就交换
String temp1 = s;
s = t;
t = temp1;
int temp = len_i;
len_i = len_j;
len_j = temp;
}
int temp = 0;//用来就当前这一位的加和
int carry = 0;//保存进位
int c = len_i - len_j;
StringBuffer a = new StringBuffer(s);
StringBuffer b = new StringBuffer(t);
while(c > 0){
b.insert(0,"0");
c --;
}
for(int i = len_i;i >= 0;i --){
temp = a.charAt(i) - '0' + b.charAt(i) - '0' + carry;
if(temp >= 10){
temp -= 10;
carry = 1;
}else{
carry = 0;
}
char ss = (char)(temp + '0');
a.setCharAt(i,ss);
}
if(carry == 1){
a.insert(0,"1");
}
return a.toString();
}
}Python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 计算两个数之和
# @param s string字符串 表示第一个整数
# @param t string字符串 表示第二个整数
# @return string字符串
#
class Solution:
def solve(self , s , t ):
maxlen = max(len(s),len(t))
s = s.zfill(maxlen)
t = t.zfill(maxlen)
res = ''
carry = 0
for i in range(-1, -maxlen-1,-1):
temp = ord(s[i]) + ord(t[i]) -96 + carry
if temp >= 10:#如果temp的值超过9则有进位
temp -= 10
carry = 1
else:
carry = 0
res += str(temp)#当前这位做完加法后的值
if carry:
#99 + 1 = 100 发生了进位,所以最后得特判一下是否有类似这样的进位
res += str(1)
return res[::-1]JavaScript版本:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
function solve( s , t ) {
// write code here
let len_i = s.length - 1;
let len_j = t.length -1;
if(len_i < len_j){
//如果字符串s的长度比字符串t的长度小就交换
let temp1 = s;
s = t;
t = temp1;
let temp = len_i;
len_i = len_j;
len_j = temp;
}
let temp = 0;///用来就当前这一位的加和
let carry = 0;///保存进位
let c = len_i - len_j;///用来给短的那一字符串添加前导“0”
while(c > 0){
t = '0' + t;
c --;
}
let sum = "";
for(let i = len_i;i >= 0;i --){///倒着开始进行进位运算
temp = parseInt(s[i]) + parseInt(t[i]) + carry;
if(temp >= 10){///如果temp的值超过9则有进位
temp -= 10;
carry = 1;
}else{
carry = 0;
}
sum = String.fromCharCode(temp + 48) + sum;
//s[i] = String.fromCharCode(temp + 48);///当前这位做完加法后的值
}
if(carry == 1){
///d
sum = "1" + sum ;
}
return sum;
}
module.exports = {
solve : solve
};
京公网安备 11010502036488号