加一
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。
最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。
示例 2:
輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。
這道題很簡單,只需要考慮到9這個情況就可以了。
/**
* @param {number[]} digits
* @return {number[]}
*/
var plusOne = function(digits) {
var last = digits.length - 1;
if(digits[last] !== 9){
digits[last]++;
return digits
}
while(digits[last]&&digits[last] === 9){
digits[last] = 0;
last--;
}
if(last === -1){
digits.unshift(1)
return digits;
}else{
digits[last]++;
return digits;
}
};
執行用時 :72 ms
內存消耗 :32.4 MB
字符串相乘
給定兩個以字符串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示爲字符串形式。
示例 1:
輸入: num1 = “2”, num2 = “3”
輸出: “6”
示例 2:
輸入: num1 = “123”, num2 = “456”
輸出: “56088”
說明:
- num1 和 num2 的長度小於110。
- num1 和 num2 只包含數字 0-9。
- num1 和 num2 均不以零開頭,除非是數字 0 本身。
- 不能使用任何標準庫的大數類型(比如 BigInteger)或直接將輸入轉換爲整數來處理。
不能直接使用大數類型直接轉換,採用拆分兩個數之後將拆解的數分別進行相乘後相加。
比如11 * 12 這種,
可以看作是10 * 10+10 * 2 + 1 * 10 + 1 * 2這樣,這時候只需要考慮每個乘積滿
10的情況。
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var multiply = function(num1, num2) {
if(num1 === '0' || num2 === '0') return '0'
let length1 = num1.length,
length2 = num2.length,
result = new Array(length1+length2).fill(0)
for(let i = length1-1;i>=0;i--){
for(let j = length2-1;j>=0;j--){
const num = num1[i] * num2[j]
const p1 = i + j;
const p2 = i + j + 1;
const sum = num + result[p2]
result[p1] += Math.floor(sum/10)
result[p2] = sum%10
}
}
if(result[0] === 0 ) result.shift()
return res.join('')
};
執行用時 :72 ms
內存消耗 :36.6 MB