66.加一
解析:两种方法都有就是在数组必要时(如999)进行插入操作
。
方法一:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
for (int i = digits.size() - 1; i >= 0; i--)
{
if (digits[i] == 9)
{
digits[i]=0;
}
else
{
digits[i] += 1;break;
}
if (digits[0] == 0)
digits.insert(digits.begin(), 1);
}
return digits;
}
};
方法二:更慢一点
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
if (digits.empty()) return digits;
int carry = 1, n = digits.size();
for (int i = n - 1; i >= 0; --i) {
if (carry == 0) return digits;
int sum = digits[i] + carry;
digits[i] = sum % 10;
carry = sum / 10;
}
if (carry == 1) digits.insert(digits.begin(), 1);
return digits;
}
};
67.二进制求和
[1] :此题要注意的是如何将string和int之间互相转换,两个输入string的长度也可能会不同。
- 这时我们需要新建一个string,它的长度是两条输入string中的较大的那个,并且把较短的那个输入string通过在开头加字符‘0’来补的较大的那个长度。
- 这时候我们逐个从两个string的末尾开始取出字符,然后转为数字,相加,如果大于等于2,则标记进位标志carry,并且给新string加入一个字符‘0’。
方法一:
class Solution {
public:
string addBinary(string a, string b) {
string res;
int aLen = a.size();
int bLen = b.size();
int n = max(aLen, bLen);
bool carry = false;//进位
if (aLen > bLen)
for (int i = 0; i < aLen - bLen; i++)
b.insert(b.begin(), '0');
else
for (int i = 0; i < bLen - aLen; i++)
a.insert(a.begin(), '0');
for (int i = n - 1; i >= 0; i--)
{
int temp = 0;
if (carry)temp = (a[i] - '0' + b[i] - '0' + 1);
else temp = (a[i] - '0' + b[i] - '0');
if (temp == 0)
{
res.insert(res.begin(), '0');
carry = false;
}
else if (temp == 1)
{
res.insert(res.begin(), '1');
carry = false;
}
else if (temp == 2)
{
res.insert(res.begin(), '0');
carry = true;
}
else if (temp == 3)
{
res.insert(res.begin(), '1');
carry = true;
}
}
if (carry == true)res.insert(res.begin(), '1');
return res;
}
};
方法二:
把之前的insert改成字符串直接相加。用余,除运算代替具体取值。
class Solution {
public:
string addBinary(string a, string b) {
string res="";
int m = a.length()-1, n = b.length()-1,carry=0;
while (m>=0 || n>=0)//切忌while(m||n),因为可能都是负数那就死循环
{
int p = m >= 0 ? a[m--] - '0' : 0;
int q = n >= 0 ? b[n--] - '0' : 0;
int sum = p + q + carry;
carry = sum / 2;
res = to_string(sum%2)+res;
}
if (carry)res = "1" + res;
return res;
}
};
static const auto kSpeedUp = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
return nullptr;
}();