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.
題目的意思是這樣的 給出一個非負的數,用數組來表示這個數,比如說9999就是[9,9,9,9]當對這個數加一的時候,將這個數用數組的形式返回。
很容易想到一個簡單的方法,設置一個進位,首先判斷數組最后一個元素加上1后是否產生進位(等于10),如果產生進位就將該元素置為0,其他的元素也是同樣的操作,在這邊有個小技巧,題目中說的是對這個數+1那么可以認為起始的進位就是1。當其中一個元素小于10的時候就直接將數組返回;當最高位執行完后沒有返回也就是說最高位產生了進位,那就要產生一個新的數組,最高位為1,其余都是0
1 public class Solution { 2 public int[] plusOne(int[] digits) { 3 int n = digits.length; 4 int jinwei = 1; 5 int i; 6 for (i = n - 1; i >= 0; i--) { 7 digits[i] += jinwei; 8 if (digits[i] < 10) 9 return digits;10 /* 有進位 */11 else12 digits[i] = 0;13 }14 /* 表示最高位有進位 */15 int[] newdigits = new int[n + 1];16 newdigits[0] = 1;17 for (int k = 1; k < n + 1; k++)18 newdigits[k] = 0;19 return newdigits;20 }21 }
下面是網上的C++代碼,借鑒一下
1 class Solution { 2 public: 3 vector<int> plusOne(vector<int> &digits) { 4 5 int size = digits.size(); 6 7 if (digits[size - 1] < 9) 8 { 9 digits[size - 1] += 1;10 return digits;11 }12 13 // 是否需要進位14 bool carry = true;15 16 for (int i = size - 1; i >= 0; i --)17 {18 if (!carry)19 {20 break;21 }22 23 if (digits[i] == 9)24 {25 carry = true;26 27 // 進位后,原位置028 digits[i] = 0;29 30 if (i == 0)31 {32 // 數組首個數字進位后,需要新插入數字首位33 digits.insert(digits.begin(), 1);34 }35 }36 else37 {38 // 不進位,就退出了39 carry = false;40 digits[i] += 1;41 }42 }43 44 return digits;45 }46 };
又水一題~~ 233333
新聞熱點
疑難解答