码迷,mamicode.com
首页 > 编程语言 > 详细

力扣(LeetCode)试题66-加一 C++代码(纯纪念)

时间:2020-07-09 22:39:03      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:===   i++   img   style   数字   取出   结果   color   strong   

好吧,我魔怔了,=============================================线的下半部分是用来给我看的

 

 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 }

技术图片

 

力扣(LeetCode)试题66-加一 C++代码(纯纪念)

标签:===   i++   img   style   数字   取出   结果   color   strong   

原文地址:https://www.cnblogs.com/pgzhanglin/p/13276382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!