#include <iostream>
#include <algorithm>
#include "string"
#include "vector"
#include "stack"
using namespace std;
//测试用例过大,遍历数组转为数字,加一后,再生成数组返回的方式行不通,即使用long long,也过不了后面那个更长的测试用例
//vector<int> plusOne(vector<int>& digits)
//{
// vector<int> res;
// int sum= 0;
// for (int i = 0; i<digits.size() ; i++)
// {
// sum = sum* 10 + digits[i];
// }
// sum = sum+1;
// //cout << sum<<endl;
//
// while (sum)
// {
// //int num = sum % 10; //cout << num << endl;
// res.push_back(sum % 10);
// /*for (int i = 0; i < res.size(); i++)
// {
// cout << res[i] << endl;
// }*/
// sum /= 10;
// }
//
// reverse(res.begin(),res.end());
// /*for (int i = 0; i < res.size(); i++)
// {
// cout << res[i] << endl;
// }*/
// return res;
//}
//vector<int> plusOne(vector<int>& digits)
//{
// int cnt = 0;
// for (int i = digits.size() - 1; i >= digits.size() - 1&&i>=0; i--)
// {
// digits[i] = (digits[i]+1)%10+cnt;
// cnt = (digits[i] + 1) / 10;
// //cout << v[i] << endl;
// if (cnt == 0)
// return digits;
// }
// vector<int>res;
// res[0] = 1; res.push_back(digits);
// return res;
//}
vector<int> plusOne(vector<int>& digits)
{
//按一般的逻辑来解,先直接在尾部加一
digits[digits.size() - 1] += 1;
for (int i = digits.size() - 1; i >= 0; i--) //再开始判断数组里面的值,从低位向高位开始判断
{
if (digits[i] == 10) //假如加一为10,那么要进位,分2种情况
{
if (i == 0) //1.如果它是首位那么就要进位变成10 如[9] [1,0]
{
digits[i] = 1;
digits.push_back(0);
}
else //2.不是首位,则该位变0,前面一位加一
{
digits[i] = 0;
digits[i - 1] += 1;
}
}
}
return digits;
}
int main()
{
vector<int>v;
v.push_back(9);
//v.push_back(1);
//v.push_back(2);
//v.push_back(3);
plusOne(v);
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << endl;
}
system("pause");
return 0;
}