1. 程式人生 > >leetcode(領釦)---javascript參考答案

leetcode(領釦)---javascript參考答案

記錄一些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],也就是符合題目要求的樣子。