力扣(LeetCode)试题66-加一 C++代码(纯纪念)
好吧,我魔怔了,=============================================线的下半部分是用来给我看的
1 class Solution {
2 public:
3 vector<int> plusOne(vector<int>& digits)
4 {
5 //第三种思路
6 vector<int> result;
7 int val = digits.size();
8 if (val == 0) result.push_back(0);
9 else
10 {
11 while (val>0)
12 {
13 if (digits[val - 1] != 9)
14 {
15 digits[val - 1] += 1;
16 result = digits;
17 break;
18 }
19 else
20 {
21 digits[val - 1] = 0;
22 val -= 1;
23 if (val == 0)
24 {
25 result.push_back(1);
26 result.insert(result.end(),digits.begin(),digits.end());
27 }
28 }
29 }
30 }
31 return result;
32 }
33 };
34
35 int main()
36 {
37 vector<int> digits{1,2,3};
38 vector<int> result;
39 Solution sol;
40 result = sol.plusOne(digits);
41 for (int i = 0; i < result.size(); i++)
42 cout << result[i];
43 cout << endl;
44
45 int u;
46 cin >> u;
47 return 0;
48 }
====================================================================================================================================================================================
速度不快,内存不小,emmm,但是都是自己写的,还是需要纪念一下的
第一次思路(错的):将数组表示为整数,然后整数+1,再把整数拆开,组合成数组。见程序中注释部分
执行时发现,如果数组个数太多,如[9,8,7,6,5,4,3,2,1,0],转换成整数时就已经溢出了。于是苦思冥想其他解法
第二次思路(对的):将数组表示为字符串,把字符串的每一位看成整数,+1操作后,再转换为数组
1 #include <iostream>
2 #include <vector>
3 #include <stack>
4 #include <string>
5
6 using namespace std;
7
8 class Solution {
9 public:
10 vector<int> plusOne(vector<int>& digits)
11 {
12 int val = digits.size();
13 string digit = "";//用字符串表示该值
14 string digit_ = "1";//如果数字每一位都为9,需要进位操作
15 vector<int> result;//存放结果
16
17 if (val == 0) result.push_back(1);
18 else
19 {
20 for (int i = 0; i < val; i++)//用字符串表示该数组表达的值
21 {
22 digit += to_string(digits[i]);
23 }
24
25 int k = digit.length();
26 int t = digit.length();
27 int d;
28
29 while (k > 0)
30 {
31 if (digit[k - 1] != '9')//若最后一位不是9,那就好办了,直接+1
32 {
33 d = digit[k - 1] - '0';//将字符转换成数字
34 d += 1;
35 digit[k - 1] = d + '0';
36 break;
37 }
38 else//若最后一位是9,进位以后最后一位为0,再向高位判断,遇到9则该位为0,直到某位不为9,该位+1
39 {
40 digit[k - 1] = '0';
41 k -= 1;
42 if (k == 0)
43 {
44 digit_ += digit;
45 digit = digit_;
46 }
47 }
48 }
49
50 for (int j = 0; j < digit.length(); j++)
51 result.push_back(digit[j]-'0');
52
53 }
54 return result;
55 //int val = digits.size();
56 //unsigned long int digit;//用于表示数组表示的整数
57 //vector<int> result;//存放结果
58 //stack<int> result_;//定义一个栈结构,一会就知道为什么了
59 //if (val == 0) result.push_back(1);
60 //else
61 //{
62 // digit = digits[0];//将第一个元素赋值给digit
63 // for (int i = 1; i < val; i++)//得到数组表示的整数
64 // {
65 // digit = (digit * 10 + digits[i]);
66 // }
67 // digit += 1;//将该整数+1,然后再以数组的形式返回
68
69 // while (digit != 0)
70 // {
71 // int bit;//取某一位
72 // bit = digit % 10;//取出最后一位
73 // digit /= 10;
74 // result_.push(bit);//此时result_里面是倒序的,还需要倒过来,故栈结构很合适
75 // }
76
77 // while (result_.size() != 0)
78 // {
79 // int p;
80 // p = result_.top();//依次从栈中取出栈顶数据,存入result,得到正确顺序的结果
81 // result.push_back(p);
82 // result_.pop();
83 // }
84 //}
85 //return result;
86 }
87 };
88
89 int main()
90 {
91 vector<int> digits{ 9 };
92 vector<int> result;
93 Solution sol;
94 result = sol.plusOne(digits);
95 for (int i = 0; i < result.size(); i++)
96 cout << result[i];
97 cout << endl;
98
99 int u;
100 cin >> u;
101 return 0;
102 }