/** * @param {number[]}digits * @return {number[]} */ var plusOne = function (digits) { let carry = false digits[digits.length - 1]++ for (let i = digits.length - 1; i >= 0; i--) { if (carry) digits[i]++ carry = digits[i] > 9 digits[i] %= 10 } if (carry) digits.unshift(1) return digits }
8.移动零
利用双指针就可以做出来,通过循环,把不是零的数字往后靠。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/** * @param {number[]}nums * @return {void}Do not return anything, modify nums in-place instead. */ var moveZeroes = function (nums) { let index = 0 for (let i = 0; i < nums.length; i++) { if (nums[i] !== 0) { let temp = nums[index] nums[index] = nums[i] nums[i] = temp index++ } } }
9.两数之和
两数之和是力扣的第一题,当初使用两个 for 循环做的,暴力破解,然后又用双指针试了一下,发现和暴力破解的做法差不多;看了别人写的题解,可以用哈希表来做。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/** * @param {number[]}nums * @param {number}target * @return {number[]} */ var twoSum = function (nums, target) { let map = newMap()
for (let i = 0; i < nums.length; i++) { if (map.has(target - nums[i])) { return [map.get(target - nums[i]), i] } else { map.set(nums[i], i) } } }
10.有效的数独
11.旋转图像
字符串
1.反转字符串
思路非常简单,利用双指针解决,左指针为 0,右指针为数组长度-1,然后对称交换即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/** * @param {character[]}s * @return {void}Do not return anything, modify s in-place instead. */ var reverseString = function (s) { let i = 0, j = s.length - 1
while (i <= j) { let temp = s[i] s[i] = s[j] s[j] = temp i++ j-- } }
也可以利用JavaScript数组中的reverse方法直接反转,比较骚的操作。
1 2 3 4 5 6 7
/** * @param {character[]}s * @return {void}Do not return anything, modify s in-place instead. */ var reverseString = function (s) { s.reverse() }