LeetCode第[66]題(Java):Plus One

來源:互聯網
上載者:User

標籤:直接   amp   git   number   any   bsp   base   repr   sel   

題目:數組加一

難度:Easy

題目內容

 

Given a non-empty array of digits representing a non-negative integer, plus one to the integer.

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contain a single digit.

You may assume the integer does not contain any leading zero, except the number 0 itself.

翻譯

給定一個非空的數字數組,表示一個非負整數,加上1到整數。

這些數字被儲存起來,使得最重要的數字位於列表的頭部,數組中的每個元素都包含一個數字。

您可以假設這個整數不包含任何前置字元為零,除了數字0本身

Example 1:

Input: [1,2,3]Output: [1,2,4]Explanation: The array represents the integer 123.

Example 2:

Input: [4,3,2,1]Output: [4,3,2,2]Explanation: The array represents the integer 4321.

我的思路:一開始想到的是,用StringBuffer將他們一個一個都取出來,然後轉為int再相加,然後再轉為int數組返回,然後發現,有幾個測試案例特別長。。。。無法用String轉為int或者long。

    所以只能考慮遍曆,從尾開始遍曆,如果當前值加上進位 大於9,那麼當前值就為0,並且繼續進位,否則則直接返回。

    然後最後退出迴圈的時候也要判斷一下是否最後一位也是有進位,如果是,則最前面比原來多出一位“1”,所以必須重新new一個int[]。

My Code:

 1     public int[] plusOne(int[] digits) { 2         int i = digits.length-1; 3         while (i > -1) { 4             if (digits[i] + 1 > 9) { 5                 digits[i] = 0; 6                 i--; 7             } else { 8                 digits[i]++; 9                 return digits;10             }11         }12         int[] ans = new int[digits.length+1];13         ans[0] = 1;14         for (int j = 0; j < digits.length; j++) {15             ans[j+1] = digits[j];16         }17         return ans;18     }

我的複雜度:O(n)    空間複雜度也是O(n)

編程過程中的問題

 

答案代碼

 1 public int[] plusOne(int[] digits) { 2          3     int n = digits.length; 4     for(int i=n-1; i>=0; i--) { 5         if(digits[i] < 9) { 6             digits[i]++; 7             return digits; 8         } 9         10         digits[i] = 0;11     }12     13     int[] newNumber = new int [n+1];14     newNumber[0] = 1;15     16     return newNumber;

答案複雜度:O(n)    空間複雜度也是O(m*n)  和我的一樣

答案思路:和我的是一樣的,也是從尾到頭迴圈,但是最後再退出迴圈的時候因為是+1,此時如果還沒有return,說明digits全是9999...,所以直接return一個最前面是1,其他是0的數組就好了,不需要再將digits後面的值(肯定是0)賦給它。

 

擴充:67. Add Binary  (二進位相加)  

輸入兩個String,表示兩個位元,返回一個String表示他們倆的和。

思路:和本題一樣,從最右邊開始計算,同時計算進位符號。

  主要思想是用了兩個指標和一個進位變數carry,兩個任何一個大於等於0就繼續加,同時利用StringBuffer()一個一個放進去,最後再反轉。

代碼:

 1     public String addBinary(String a, String b) { 2         StringBuilder sb = new StringBuilder(); 3         int i = a.length() - 1, j = b.length() -1, carry = 0; 4         while (i >= 0 || j >= 0) { 5             int sum = carry; 6             if (j >= 0) sum += b.charAt(j--) - ‘0‘; 7             if (i >= 0) sum += a.charAt(i--) - ‘0‘; 8             sb.append(sum % 2); 9             carry = sum / 2;10         } 11         if (carry != 0) sb.append(carry);12         return sb.reverse().toString();13     }

 注意,需要將 char - ‘0’  轉為數組,並且別忘了 i -- 和 j --。

LeetCode第[66]題(Java):Plus One

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.