我的思路:
1 自然是从后面开始判断,如果是9那么就要进位变成0,依次后面都要改变,直到不是9为止,返回数组。如果全部是9,那么就要把第一个数变成1,接着每个数变成0,然后再添加一个0。
贴出代码如下,
vector<int> AddOneDigits = digits;
vector<int>::iterator i;
for (i = AddOneDigits.begin(); i != AddOneDigits.end(); i++) { //这里寻找了第一个9出现的位置,没有任何必要
if (*i != 9) {
for (vector<int>::iterator j = AddOneDigits.end() - 1; j >= i; --j) {
//直接改变了一个数,也可以使用取余之类的方法来实现
if (*j == 9)
*j = 0;
else {
(*j)++;
return AddOneDigits;
}
}
}
}
//这一大段代码可以用一个vector的插入来完成 AddOneDigits.insert(AddOneDigits.begin(), 1)
if (i == AddOneDigits.end()) {
*AddOneDigits.begin() = 1;
for (auto k = AddOneDigits.begin() + 1; k != AddOneDigits.end(); ++k)
*k = 0;
AddOneDigits.push_back(0);
}
return AddOneDigits;
最近刚开始做这些题,发现自己的思路还是非常混乱,没有什么逻辑性可言,每做一题要尽量能够有一些的提升。下面是修改代码。
vector<int> AddOneDigits = digits;
vector<int>::iterator i;
for (vector<int>::iterator i = AddOneDigits.end() - 1; i >= AddOneDigits.begin(); --i) {
if (*i == 9)
*i = 0;
else {
(*i)++;
return AddOneDigits;
}
}
AddOneDigits.insert(AddOneDigits.begin(), 1);
return AddOneDigits;
今天遇到的两题主要的思维是:
1 逆向解决问题,通过循环来做到不满足条件的时候跳过我们要执行的代码。如数组元素去重。
今天两题到此结束。