[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題但我還是折騰了很久,一開始做出一個(gè)逗比解法:把數(shù)組讀出來(lái)拼裝成數(shù)字,然后加1,再拆成數(shù)組。然后還自作聰明的處理了溢出的情況。結(jié)果發(fā)現(xiàn)人家根本不對(duì)范圍有限制,也就是即使數(shù)組里面是一億也要返回一億零一。所以那個(gè)想法還是圖樣圖森破。所以只能對(duì)數(shù)組做操作了。。。?
? 但是處理加1就要考慮進(jìn)位的問題,而進(jìn)到最后就要多出一位數(shù),多出一位數(shù)就意味著要往數(shù)組頭塞進(jìn)一個(gè)數(shù),要往數(shù)組頭塞進(jìn)一個(gè)數(shù)跟重新創(chuàng)建一個(gè)新數(shù)組沒區(qū)別,所以這題應(yīng)該是沒有很好的 In place 解法。
? 然后就要考慮怎么實(shí)現(xiàn)加1這個(gè)操作了: 如果數(shù)字不是9的話就直接加1,如果是9的話就要變成0并且把進(jìn)位設(shè)為1....
這樣貌似很復(fù)雜,一時(shí)不知道怎么寫,case估計(jì)也很多,要判斷具體值和進(jìn)位,But...其實(shí)仔細(xì)思考以后發(fā)現(xiàn),加1操作其實(shí)和進(jìn)位并沒有本質(zhì)區(qū)別。
把一個(gè)數(shù)加1其實(shí)跟一個(gè)數(shù)的小數(shù)部分進(jìn)了一位到個(gè)位上沒有什么區(qū)別。所以,把加1和進(jìn)位操作為一類動(dòng)作后問題也就簡(jiǎn)單了。
? 思路就是:把進(jìn)位初始值設(shè)為1,從數(shù)組末尾往回掃,取到一個(gè)數(shù)就把他加上進(jìn)位,然后除以10算出新的進(jìn)位,模以10算出新值,把新值push進(jìn)棧。
這樣到掃描完的時(shí)候,再檢查一下最后的進(jìn)位值是否為1,是的話就把1push進(jìn)棧。最后把棧倒進(jìn)數(shù)組返回就行了。
這里需要注意的是:
1.便利結(jié)束后還需檢查最后是否還有進(jìn)位
2.這樣從低位到高位逐個(gè)產(chǎn)生數(shù)的順序是反的,需要反過(guò)來(lái),這里就用棧來(lái)做逆序操作。
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; } 逗比版?
轉(zhuǎn)載于:https://www.cnblogs.com/agentgamer/p/4098571.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的[LeetCode] Plus One的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java小对象的解决之道——对象池(Ob
- 下一篇: 20140625 程序 进程 线程 物