leetcode(領釦)---javascript參考答案
阿新 • • 發佈:2018-12-22
記錄一些leetcode上的題,其中涉及到es6語法。
原始碼放到github上了,可以自行下載,複製等。
<!-- leetcode number 1 --> var nuss = [2, 7, 11, 15], target = 9; var twoSum = function (nums, target) { var result = []; var leng = nums.length; // console.log(leng); for (var i = 0; i < leng; i++) { for (var j = i + 1; j < leng; j++) { if (nums[i] + nums[j] == target) { result.push(i, j); continue; } } } return result; };
1題沒什麼說的,直接二維陣列遍歷,但是比較慢。
<!-- leetcode number 771 --> var numJewelsInStones = function(J, S) { var Jleng = J.length; var Sleng = S.length; var sum = 0; for (var i = 0; i < Jleng; i++) { for (var j = 0; j < Sleng; j++) { if (S[j].indexOf(J[i]) > -1) { sum++; } } } return sum; };
771題,可以用indexOf來確定是否含有。
<!-- leetcode number 929 --> var numUniqueEmails = function (emails) { const emailList = new Set(); emails.forEach(item => { let tempArr = item.split('@'); const local = tempArr[0].split('+')[0].replace(/\./g, ''); emailList.add( local + '@' + tempArr[1]) }); return [...emailList].length; };
929題,借鑑大佬的方法,使用了ES6語法中的新資料結構set,它自帶去重功能,然後再用[...emailList]重新恢復成陣列。
<!-- leetcode number 709 -->
var toLowerCase = function(str) {
return str.toLowerCase();
};
709題,搞笑來的?(╯‵□′)╯︵┻━┻
<!-- leetcode number 349 -->
var intersection = function (nums1, nums2) {
var newset1 = new Set(nums1);
var newset2 = new Set(nums2);
return [...newset1].filter(x => newset2.has(x));
};
349題,借鑑了阮一峰大佬的《ES6入門》,巧妙利用set的has方法。
<!-- leetcode number 344 -->
var reverseString = function(s) {
return s.split("").reverse().join("");
};
344題,比較經典吧,算是。
<!-- leetcode number 371 -->
var getSum = function(a, b) {
let sum, carry;
sum = a ^ b;
carry = (a & b) << 1;
if (carry == 0) {
return sum;
} else {
return getSum(sum, carry);
}
};
371題,可以參考這位仁兄的答案,大致就是說利用異或運算、和運算來分別得到沒進位的數和進位的值。
<!-- leetcode number 905 -->
var sortArrayByParity = function(A) {
var arr = [];
A.forEach(function(val, index){
if(val % 2) {
arr.push(A[index]);
}else{
arr.unshift(A[index]);
}
});
return arr;
};
905題,前邊偶數後邊奇數,所以就用陣列的方法就可以。
<!-- leetcode number 922 -->
var sortArrayByParityII = function(A) {
var ans = new Array(A.length);
var odd = 1,
even = 0;
for (var i = 0; i < A.length; i++) {
if (A[i] % 2 === 0) {
ans[even] = A[i];
even += 2;
} else {
ans[odd] = A[i];
odd += 2;
}
}
return ans;
};
922題,遍歷A陣列,按照“偶奇偶奇”,對應賦值。
<!-- leetcode number 26 -->
var removeDuplicates1 = function (nums) {
let flag = 0;
for (let i = 1; i < nums.length; i++) {
if (nums[i] !== nums[i - 1]) {
flag++;
nums[flag] = nums[i];
}
}
//console.log(nums);
return flag + 1;
};
26題,不是單純的返回不同數的長度,裡邊應該有檢測輸入陣列是否被變成了理想的樣子。比如我們輸入console.log(removeDuplicates1([1, 1, 2, 2, 2, 3, 3, 3, 4, 5]));那麼函式返回的值是5,但是從console.log可以看出傳入的nums陣列變成了[1, 2, 3, 4, 5, 3, 3, 3, 4, 5],也就是符合題目要求的樣子。