[LeetCode] Plus One

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐镜像

参考网址&#xff1a;https://coderschool.cn/1853.html

六大“未来式”存储器,谁将脱颖而出?

来源&#xff1a;半导体行业观察摘要&#xff1a;最近&#xff0c;一篇回顾该领域现状的论文对六种最有前景的技术进行了盘点和解读。对神经形态计算的浓厚兴趣刺激人们研发出一系列全新的存储设备&#xff0c;这些设备可以复制生物神经元和突触功能。最近&#xff0c;一篇回顾…

理论篇 GIT使用笔记

GIT学习指导的游戏&#xff1a;http://pcottle.github.io/learnGitBranching/?NODEMO git fetch: 下载远端所有分支的本地没有的提交列表&#xff0c;并更新local分支origin/master 1. 从remote下载local resp未包含的提交对象&#xff1b; 2. 更新local resp的远端分支点(如…

cuda学习

CUDA 安装测试部分 https://blog.csdn.net/sunmc1204953974/article/details/51000970 CUDA的HelloWorld程序编写 https://www.cnblogs.com/neopenx/p/4643705.html 对多线程并行处理的解释&#xff1a;https://blog.csdn.net/sunmc1204953974/article/details/51025801 以下的…

英特尔第七任CEO敲定 斯旺为何受到董事会青睐?

来源&#xff1a;网易科技2019年1月最后一天&#xff0c;芯片巨头英特尔公司(Intel)宣布任命临时首席执行官罗伯特斯旺(Robert Swan)为正式CEO&#xff0c;从而结束了长达数月的猎头工作。此前&#xff0c;英特尔前任CEO布莱恩柯再奇(Brian Krzanich)因与员工存在“暧昧关系”而…

sudo使用

sudo使用 /etc/sudo.conf /etc/sudoers /etc/sudoers.d/ /etc/sudo-ldap.conf /etc/sudoer sudo安全策略配置文件 Defaults requiretty Defaults !visiblepw Defaults always_set_home Defaults env_reset Defaults env_keep "COLORS DISPLAY HOSTNAME HI…

图灵奖得主长文报告:是什么开启了计算机架构的新黄金十年?

来源&#xff1a;AI科技评论摘要&#xff1a;2017 年图灵奖的两位得主 John L. Hennessy 和 David A. Patterson 就是这个新浪潮的见证者和引领者。近几年来&#xff0c;不论是普通消费者还是科研人员们都可以感受到两种浪潮&#xff0c;一种是CPU速度的提升越来越不显著了&…

ubuntu安装wine之后进不了系统

以前曾经装过一次wine&#xff0c;安装的时候没碰到什么问题&#xff0c;但卸载的时候却出问题了&#xff0c;把我nouvean显卡给删除了。 自然&#xff0c;我下一次启动的时候就进不了桌面了。所以我得重装一次&#xff0c;那一次重装的是整个系统&#xff01; 今天突然觉得evi…

5G到底有哪些能力

来源&#xff1a;工信头条作者&#xff1a;华为5G首席科学家 童文摘要&#xff1a;华为5G首席科学家告诉你5G到底有哪些能力&#xff01;2019年是5G产业进入全面商用的关键一年&#xff0c;全球5G网络的部署已经启动。2018年6月&#xff0c;5G独立组网标准冻结&#xff0c;5G完…

口琴简易吹奏法

摘自上海口琴说明书。 口琴体积小巧&#xff0c;携带方便&#xff0c;有"带着走的音乐"、"口袋里的钢琴"之称。 口琴是一种簧舌乐器&#xff0c;用嘴吹吸发音。 复音口琴每孔上下两个是同音&#xff0c;吹奏时两格内的簧片同时发音。 口琴的 "1、3…

商业航天:通往太空旅程的新门票

来源&#xff1a;资本实验室自1969年美国实现人类首次登月之后&#xff0c;很长一段时间里&#xff0c;人类对月球的探索计划因各种原因变得沉寂。近年来&#xff0c;随着各国航天科技的持续发展&#xff0c;人类正在启动对月球的全新探索旅程。今年1月3日&#xff0c;我国“嫦…

win32程序调试

win32程序调试函数&#xff1a;https://blog.csdn.net/github_35160620/article/details/51864872 显示在编译器调试时的输出栏&#xff1b; debugView的使用&#xff0c;注意是程序单独运行时的调试工具&#xff0c;不是在VS编译器下&#xff1a;https://blog.csdn.net/bearc…

关于用css实现的文字超出部分显示省略号

文字超出部分显示省略号还是比较常用的一个效果,最近看到网上的一些方法亲自实践了一下,发现有些以前一些浏览器不能用的属性现在可以用了&#xff0c;于是研究了一番&#xff0c;现总结如下&#xff1a; 我们先来看下HTML代码&#xff1a; <div><p><span>用…

AIoT的生死局:未来的AIoT很赚钱,但目前的AI+IoT很花钱

来源&#xff1a;物联网智库整理摘要&#xff1a;AIoT目前仍处于发展的起步阶段&#xff0c;只能作为一种美好的愿想&#xff0c;无论从AI还是IoT本身来看&#xff0c;仍然存在着许许多多的问题。如同互联网等新兴技术发展初期一样&#xff0c;AIoT也多少存在追捧与泡沫。尽管从…

指针数组和数组指针

int p[4] 与 int (p[4]) 等价 &#xff3b;&#xff3d;优先级比高&#xff0c;因此p先和&#xff3b;&#xff3d;结合&#xff0c;表明p是一个数组&#xff0c;且含有4个元素&#xff0c;然后再和结合&#xff0c;表明数组元素为指针&#xff0c;最后指明指针指向的是int类型…

链表的经典问题

链表的经典问题 如何判断两个单链表是否相交&#xff0c;如果相交&#xff0c;找出交点&#xff08;两个链表都不存在环&#xff09; 如果两个单链表相交&#xff0c;那应该呈“Y”字形&#xff0c;也就是从交点以后的部分是两个链表的公共节点。 所以&#xff0c;判断是否相交…

亚马逊、谷歌和微软寸土必争的新战场

作者&#xff1a; Caroline Donnelly 编译&#xff1a;机器之能 张玺摘要&#xff1a;当亚马逊、谷歌与微软都表示要争取所有可能的垂直市场客户时&#xff0c;云服务三巨头在零售市场的竞争变得愈发有趣。云技术在零售市场应用方面表现抢眼&#xff0c;但是竞争问题正在影响客…

duilib环境配置以及简单入门介绍

内容全部为转载&#xff1a; VS2013的编译&#xff0c;https://www.cnblogs.com/Alberl/p/3342030.html duilib框架介绍&#xff0c;以及VS2013配置&#xff0c;创建工程&#xff0c;调试代码部分&#xff1a; https://blog.csdn.net/lanuage/article/details/52040306 https:/…

Android开发之Java集合类性能分析

对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的&#xff0c;目前主要提供了List、Set和 Map这三大类的集合&#xff0c;今天就他们的子类在标准情况和多线程下的性能做简单的分析。 Collection接口主要有两种子类分别为List和Set&am…

2019年汽车行业深度投资研究

来源&#xff1a;中泰证券2018年预计我国汽车销售负增长&#xff0c;为30年来首次&#xff0c;批发数据自5月份开始逐步下降&#xff0c;尤其是9月之后,销售增速加速下滑,判断汽车市场弱势的原因和持续时间长短&#xff0c;是思考2019年汽车行业投资策略的前提。我们认为&#…