66.加1

打印 上一主题 下一主题

主题 2299|帖子 2299|积分 6897

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目次

一、问题形貌
二、解题思绪
三、代码
四、复杂度分析


一、问题形貌

给定一个由 整数 构成的 非空 数组所表示的非负整数,在该数的底子上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
二、解题思绪



  • 从数组的 末了一位(最低位) 开始加 1;
  • 假如这一位加完不是 10,就直接返回;
  • 假如是 10,就酿成 0,然后进位,继续处理前一位;
  • 假如最前一位也进位了,比如 [9,9,9],末了就需要在最前面插入一个 1。
三、代码

  1. class Solution {
  2. public:
  3.     vector<int> plusOne(vector<int>& digits) {
  4.         // 从最后一位开始处理进位
  5.         for (int i = digits.size() - 1; i >= 0; i--) {
  6.             if (digits[i] < 9) {
  7.                 // 如果当前位小于 9,直接加一,后面不用处理了
  8.                 digits[i]++;
  9.                 return digits;
  10.             }
  11.             // 当前位是 9,加一会变成 10,要进位,当前位变成 0
  12.             digits[i] = 0;
  13.         }
  14.         // 如果全部都进位了,例如 999 → 1000
  15.         // 最终结果需要在最前面插入一个 1
  16.         digits.insert(digits.begin(), 1);
  17.         return digits;
  18.     }
  19. };
复制代码
四、复杂度分析



  • 时间复杂度: O(n)(最坏情况下需要遍历整个数组)
  • 空间复杂度: O(1)(假如允许修改输入数组)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表