首页 > 解决方案 > 移动零逻辑分解Javascript

问题描述

我正在研究我在 leetcode 的讨论部分中看到的这个解决方案,并且无法掌握部分逻辑。游戏的名称是将所有零移动到给定数组的末尾,同时保持其他数字的顺序。j 索引内的增量运算符是我迷路的地方,因为那不是将非零数放在右边吗?

var moveZeroes = function(nums) {
    let j = 0
    for(let i = 0; i < nums.length; i++) {
       if(nums[i] !== 0) {
           //storing the index we are iterating on
           let n = nums[i]
           //changing the index in place to 0
           nums[i] = 0
           //console.log(nums);
           // 
           nums[j++] = n
           console.log(nums);
       }
   }
   return nums;
};

console.log(moveZeroes([0,1,0,3,12]));

标签: javascriptarraysalgorithmdata-structures

解决方案


只需删除所有零。将已删除的零添加到末尾。

var moveZeroes = (nums) =>
  (
    nums.toString().replaceAll("0,", "") +
    ",0".repeat(("" + nums).replace(/[^0]/g, "").length)
  )
    .split(",")
    .map(Number);
console.log(moveZeroes([0, 1, 0, 0, 3, 0, 12])); //[ 1, 3, 12, 0, 0, 0, 0 ]

笔记:

  • (""+nums).replace(/[^0]/g,'').length: 数组中 0 的个数
  • nums.toString():要将数组转换为我们使用的字符串,或者我们可以使用与空字符串连接的技巧,例如""+nums
  • split(','): 将字符串转换为数组
  • map(Number):将字符串数组转换为数字。

推荐阅读