一、题目
二、思路
方法一:将每一位进行相加,考虑所有情况
1、判断是否为空
2、将s置为最长的字符串
3、遍历s与t公共的部分,进行进位相加
4、当进制为1,遍历相加s与t的非公共部分
5、当进制为1,在s最前面加1
方法二:改进,将s和t分别倒置,先求公共部分,再求s独有部分,最后判断进制位是否为1
三、代码
class Solution
{
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t)
{
string str = "";
if (s.empty())
{
return t;
}
if (t.empty())
{
return s;
}
//找出最长的字符串
if (t.length() > s.length())
{
string temp = s;
s = t;
t = temp;
}
//开始遍历
int EnterNum = 0;
for (int i = t.length() - 1,j=s.length()-1; i >= 0; --i,--j)
{
int Tnum = t[i] - '0';
int Snum = s[j] - '0';
int ans = Tnum + Snum + EnterNum;
if (ans < 10)
{
s[i] = ans + '0';
EnterNum = 0;
}
else
{
s[j] = (ans - 10) + '0';
EnterNum = 1;
}
}
//处理最后进制为1的情况
if (EnterNum == 1)
{
//当s和t相同时,直接在s前面+1
if (s.length() == t.length())
{
s = '1' + s;
return s;
}
//当不同时,s进行进位计算
else
{
for (int i = s.length() - t.length() - 1; i >= 0; --i)
{
int ans = EnterNum + (s[i] - '0');
if (ans < 10)
{
s[i] = ans + '0';
EnterNum = 0;
break;
}
else
{
s[i] = '0';
EnterNum = 1;
}
}
}
}
//考虑到最后s搞完,还有1的情况
if(EnterNum==1)
{
s='1'+s;
return s;
}
return s;
}
};
改进版
class Solution
{
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t)
{
if (s.empty())
{
return t;
}
if (t.empty())
{
return s;
}
//找出最长的字符串
if (t.length() > s.length())
{
swap(s, t);
}
//反转
reverse(s.begin(), s.end());
reverse(t.begin(), t.end());
//开始遍历,处理公共部分
int EnterNum = 0;
for (int i = 0; i < t.length(); ++i)
{
int Tnum = t[i] - '0';
int Snum = s[i] - '0';
int ans = Tnum + Snum + EnterNum;
if (ans < 10)
{
s[i] = ans + '0';
EnterNum = 0;
}
else
{
s[i] = (ans - 10) + '0';
EnterNum = 1;
}
}
//处理非公共部分
for (int i = t.length(); i < s.length(); ++i)
{
int ans = EnterNum + (s[i] - '0');
if (ans < 10)
{
s[i] = ans + '0';
EnterNum = 0;
break;
}
else
{
s[i] = '0';
EnterNum = 1;
}
}
//考虑到最后s搞完,还有1的情况
if (EnterNum == 1)
{
s = s + '1';
}
reverse(s.begin(), s.end());
return s;
}
};