Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

这题有意思啊,虽然是easy题但我还是折腾了很久,一开始做出一个逗比解法:把数组读出来拼装成数字,然后加1,再拆成数组。然后还自作聪明的处理了溢出的情况。结果发现人家根本不对范围有限制,也就是即使数组里面是一亿也要返回一亿零一。所以那个想法还是图样图森破。所以只能对数组做操作了。。。

但是处理加1就要考虑进位的问题,而进到最后就要多出一位数,多出一位数就意味着要往数组头塞进一个数,要往数组头塞进一个数跟重新创建一个新数组没区别,所以这题应该是没有很好的 In place 解法。

然后就要考虑怎么实现加1这个操作了: 如果数字不是9的话就直接加1,如果是9的话就要变成0并且把进位设为1....

这样貌似很复杂,一时不知道怎么写,case估计也很多,要判断具体值和进位,But...其实仔细思考以后发现,加1操作其实和进位并没有本质区别。

把一个数加1其实跟一个数的小数部分进了一位到个位上没有什么区别。所以,把加1和进位操作为一类动作后问题也就简单了。

思路就是:把进位初始值设为1,从数组末尾往回扫,取到一个数就把他加上进位,然后除以10算出新的进位,模以10算出新值,把新值push进栈。

这样到扫描完的时候,再检查一下最后的进位值是否为1,是的话就把1push进栈。最后把栈倒进数组返回就行了。

这里需要注意的是:

1.便利结束后还需检查最后是否还有进位

2.这样从低位到高位逐个产生数的顺序是反的,需要反过来,这里就用栈来做逆序操作。

vector<int> plusOne(vector<int> &digits) {int carry = 1;int ptr = (int)digits.size() - 1;vector<int> ret;if (ptr < 0) return ret;stack<int> s;for (int i = ptr; i >= 0; i--) {int val = digits[i] + carry;carry = val / 10;val = val % 10;s.push(val);}if (carry) {s.push(1);}while (!s.empty()) {ret.push_back(s.top());s.pop();}return ret;
}

另附逗比版:

vector<int> plusOneDoge(vector<int> &digits) {int t = 0;for (int i = 0; i < digits.size(); i++) {if (t > INT_MAX / 10) {t = INT_MAX - 1;break;}t = t * 10 + digits[i];}t += 1;vector<int> ret;stack<int> s;while (t) {s.push(t % 10);t /= 10;}while (!s.empty()) {ret.push_back(s.top());s.pop();}return ret;
}

逗比版

转载于:https://www.cnblogs.com/agentgamer/p/4098571.html

[LeetCode] Plus One相关推荐

  1. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间

    题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...

  2. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  3. leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法

    题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...

  4. leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法

    题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...

  5. leetcode:2680 Remove Duplicates from Sorted Array 删除数组中的重复元素

    leetcode:26 对数组元素进行去重,使得原数组重复元素最多保留1个 限制: 我们不可以额外分配数组,必须保持空间复杂度为O(1) 这个并不难实现: class Solution(object) ...

  6. LeetCode简单题之二进制表示中质数个计算置位

    题目 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数. 计算置位位数 就是二进制表示中 1 的个数. 例如, 21 ...

  7. LeetCode简单题之删除字符使字符串变好

    题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答案总 ...

  8. LeetCode简单题之找出两数组的不同

    题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中: answer[0] 是 nums1 中所有 不 存在于 nums2 中的 ...

  9. LeetCode中等题之区域和检索 - 数组可修改

    题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...

  10. LeetCode简单题之整理字符串

    题目 给你一个由大小写英文字母组成的字符串 s . 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: 若 s ...

最新文章

  1. 熬夜与不熬夜,10年后差距到底有多大?惊了!
  2. 一位人工智能总监对AI行业的【实话实说】
  3. python list 深复制_Python中list的复制及深拷贝与浅拷贝探究
  4. mixin模式 python_Python中的mixin模式
  5. mybatis注册了mapper但是还是报错_springboot整合Mybatis
  6. 直播 | WWW 2021论文解读:基于隐私保护的模型联邦个性化
  7. 今日头条Web HTTP请求的白名单
  8. mixin network_【译文】Mixin——以最高的安全性满足所有区块链资产的交易需求
  9. 计算机网络cr什么意思,现在网络上的“CR”是指什么意思
  10. Python3 安装 mysql-python 与ImportError: No module named 'ConfigParser'报错解决方法
  11. 倍频程分析函数matlab,瞬时声压时域数据怎么用matlab进行1/3倍频程声压级分析
  12. COSMOS认证咨询,COSMOS认证推出了天然有机化妆品的标签认证法
  13. 一个自动生成卡通头像的工具网站
  14. 中国象棋c语言源代码csdn,中国象棋源代码-C语言小程序
  15. USB之Cyusb3014开发经验总结 (十八)2022-04-17
  16. ui设计师需要学哪些软件
  17. 服务器启动项目抛错 没有到主机的路由
  18. 手机平台强制进下载模式方式
  19. 基于Ant Design和jQuery UI的表单设计器
  20. SHARP AR-2048D/2348D

热门文章

  1. Vue3过渡动画实现
  2. 五、pink老师的学习笔记——CSS精灵技术(sprite)
  3. 牛客 牛牛爱喝酒(模拟)
  4. LeetCode MySQL 1126. 查询活跃业务
  5. LeetCode MySQL 1495. Friendly Movies Streamed Last Month
  6. LeetCode 97. 交错字符串(DP)
  7. LeetCode 57. 插入区间(一次遍历)
  8. LeetCode 399. 除法求值(图的DFS搜索)
  9. 302状态码_你见过 HTTP 哪些状态码?
  10. diskfileitemfactory 需要的包_浅析电动汽车电池包低压线束设计及制造