1. 程式人生 > >Plus One -- LeetCode

Plus One -- LeetCode

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                原題連結:  http://oj.leetcode.com/problems/plus-one/  
這是一道比較簡單的題目,對一個數組進行加一操作。但是可不要小看這個題,這個題被稱為“Google最喜歡的題”,因為在google面試中出現的頻率非常高。我們先說說這道題的解法。思路是維護一個進位,對每一位進行加一,然後判斷進位,如果有繼續到下一位,否則就可以返回了,因為前面不需要計算了。有一個小細節就是如果到了最高位進位仍然存在,那麼我們必須重新new一個數組,然後把第一個為賦成1(因為只是加一操作,其餘位一定是0,否則不會進最高位)。因為只需要一次掃描,所以演算法複雜度是O(n),n是陣列的長度。而空間上,一般情況是O(1),但是如果數是全9,那麼是最壞情況,需要O(n)的額外空間。程式碼如下: 
public int[] plusOne(int[] digits) {    if(digits == null || digits.length==0)        return digits;    int carry = 1;    for(int i=digits.length-1;i>=0;i--)    {        int
digit = (digits[i]+carry)%10;         carry = (digits[i]+carry)/10;        digits[i] = digit;        if(carry==0)            return digits;        }    int
[] res = new int[digits.length+1];        res[0] = 1;    return res;}
我自己在Google的電面中就遇到了這道題,我覺得為什麼Google喜歡的原因是後續可以問一些比較基本的擴充套件問題,比如可以擴充套件這個到兩個陣列相加,或者問一些OO設計,假設現在要設計一個BigInteger類,那麼需要什麼建構函式,然後用什麼資料結構好,用陣列和連結串列各有什麼優劣勢。這些問題雖然不是很難,但是可以考到一些基本的理解,所以平時準備有機會還是可以多想想哈。
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述