LeetCode初級演算法之陣列 66 加一

2021-10-11 01:56:03 字數 1428 閱讀 2643

給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位, 陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入: [1,2,3]

輸出: [1,2,4]

解釋: 輸入陣列表示數字 123。

示例 2:

輸入: [4,3,2,1]

輸出: [4,3,2,2]

解釋: 輸入陣列表示數字 4321。

題目資訊

輸入:整數陣列(整體表示乙個數字每一位就是0-9,個十百千...位)

輸出:整數陣列(給這個數字加一之後用陣列表達對應數字)

思考

一開始想到的就是模擬加法,在仔細讀題目後又得到了另一種解決方式,就是還原成表達的數字加一之後再還原成陣列。

[1,2,3]

1*100 + 2*10 + 3*1 = 123

[4,3,2,1]

4*1000 + 3*100 + 2*10 + 1*1 = 4321

這樣就有了轉化的思路,也是在這裡有點問題,下面這個**在leetcode上是沒辦法提交通過的,因為leetcode使用的示例陣列化成數字超過了long的範圍,可以換成更大的biginteger但leetcode不識別。

//方式一

public int plusone(int digits)

//完成加一步驟

num = num + 1;

//將結果數字轉為字串設定到陣列當中

string str = string.valueof(num);

int result = new

int[str.length()];

for(int i = 0; i < str.length(); i++)

return result;

}

還有一種方式就是最開始想到的,就是模擬加法手動去設定值。加一考慮的點就是進製,加1>設值》判斷-要麼繼續執行這三個步驟要麼結束

//方式二

public

int plusone(int digits)

//全進製則新建容量多一的陣列,最高位設一

digits = new

int[digits.length + 1];

digits[0] = 1;

return digits;

}

總結

總體來說是簡單的兩種思路,一是化成數字不用管怎麼加再化回陣列,二是模擬加法過程。後者要優一點

LeetCode初級演算法之陣列 存在重複

題目描述 給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。示例 1 輸入 1,2,3,1 輸出 true 示例 2 輸入 1,2,3,4 輸出 false 示例 3 輸入 1,1,1,3,3,4,3,2,4,2...

LeetCode初級演算法之陣列 加一

題目描述 題目描述 給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2...

LeetCode初級演算法之陣列 283 移動零

給定乙個陣列nums,編寫乙個函式將所有0移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 說明 必須在原陣列上操作,不能拷貝額外的陣列。儘量減少操作次數。題目資訊 輸入 陣列 輸出 陣列 將原陣列的0都移動到後面 額外 空間o 1 時間儘量...