给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
1 #include "_000库函数.h" 2 3 //不要将其取出来,直接在最后一位进行判断 4 class Solution { 5 public: 6 vector<int> plusOne(vector<int>& digits) { 7 int a = 1;//保留余数 8 int p = digits.size() - 1;//个位数的位置 9 while (p >= 0 && a) { 10 a = digits[p] + a; 11 digits[p] = a % 10; 12 a = a / 10;//是否有进位 13 --p; 14 } 15 if (a) //仍有进位 16 digits.insert(digits.begin(), a); 17 return digits; 18 } 19 }; 20 21 //我们将carry初始化为1,然后相当于digits加了一个0, 22 class Solution { 23 public: 24 vector<int> plusOne(vector<int>& digits) { 25 if (digits.empty()) return digits; 26 int carry = 1, n = digits.size(); 27 for (int i = n - 1; i >= 0; --i) { 28 if (carry == 0) return digits; 29 int sum = digits[i] + carry; 30 digits[i] = sum % 10; 31 carry = sum / 10; 32 } 33 if (carry == 1) digits.insert(digits.begin(), 1); 34 return digits; 35 } 36 }; 37 38 void T066() { 39 Solution s; 40 vector<int>v; 41 v = { 9,9,9 }; 42 v = s.plusOne(v); 43 for (auto i : v) 44 cout << i; 45 cout << endl; 46 v = { 1,2,3 }; 47 v = s.plusOne(v); 48 for (auto i : v) 49 cout << i; 50 cout << endl; 51 v = { 1,9,9 }; 52 v = s.plusOne(v); 53 for (auto i : v) 54 cout << i; 55 cout << endl; 56 57 }