zoukankan      html  css  js  c++  java
  • 力扣(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 }

  • 相关阅读:
    app测试更多机型系统解决方法
    Dsyy的第一篇博文~
    linux服务器下安装node
    android UI进阶之实现listview的下拉加载
    android应用开发全程实录用户界面部分章节你真的会用最简单的TextView么?
    android应用开发全程实录你有多熟悉listview?
    android应用开发全程实录实现甩动拨打和挂断电话
    android应用开发全程实录关于google map的部分章节漂亮的气泡地图
    android UI进阶之用ViewPager实现欢迎引导页面
    android UI进阶之实现listview中checkbox的多选与记录
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13276382.html
Copyright © 2011-2022 走看看