【发布时间】:2015-10-26 12:14:48
【问题描述】:
我正在尝试在 JS 中完成 leetcode.com question。总的来说,我是算法新手,在第一次提交时遇到了一些麻烦。
问题指定以下内容:
给定一个数组nums,编写一个函数将所有的 0 移到它的末尾,同时保持非零元素的相对顺序。
例如,给定nums = [0, 1, 0, 3, 12],在调用你的函数后,nums 应该是[1, 3, 12, 0, 0]。
注意: 您必须在不复制数组的情况下就地执行此操作。 尽量减少操作的总数。
这样,这是我的代码:
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
var i, temp;
for (i = 0; i < nums.length-1; i++) {
if(nums[i] === 0) {
temp = nums.splice(i, 1);
nums.push(temp[0]);
}
}
return null;
};
代码示例顶部的 cmets 是在其文本编辑器中提供的,这让我相信我不应该提供任何 return 语句。尽管他们网站上的验证器似乎根本不想接受,所以我开始返回 null...
当我在处理输入后将nums 记录到控制台时,我看到了所需的结果nums = [1, 3, 12, 0, 0]。不管我的回答一直被拒绝。我很想知道我在这里做错了什么,所以我可以解决它。
我知道这可能是重复的。我看到了其他关于 C 和 Java 的回复,但没有看到关于 JS 的回复。
【问题讨论】:
-
完全删除
return null。 -
1) 'returning void',意思是:不返回任何东西。所以只要写'return;'或者不写任何返回语句。 2)通过使用排序和正确的排序函数,你可以用很少的代码写出答案。
-
你的循环应该是从头到尾的。
-
您的问题的标题具有误导性。我建议将其更改为“如何让return语句不返回任何内容?”最好不要提到这个练习是关于排序的,这样读者就可以专注于你问题的本质。
-
我想知道你是否可以完全删除临时文件,然后用 push(0) 代替。所以 if 里面的行是
nums.splice(i,1); nums.push(0).
标签: javascript arrays algorithm