LeetCode Javascript實現 100. Same Tree 171. Excel Sheet Column Number

100. Same Tree

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} p
 * @param {TreeNode} q
 * @return {boolean}
 */
var isSameTree = function(p, q) {
    if(p===null&&q===null){
        return true;
    }
    if(p===null&&q!==null){
        return false;
    }
    if(q===null&&p!==null){
        return false;
    }
    if(p.val!==q.val){
        return false;
    }
    if(isSameTree(p.left,q.left)&& isSameTree(p.right,q.right)){
    return true;
    }
    else{
       return false;
    }
    
};

判斷兩個二叉樹是否是相同,個人思路就是各類狀況列出來,出錯就false,而後false就會一直上浮到最上面,最後返回出正確的boolean值。javascript

Your runtime beats 74.85% of javascriptsubmissionsjava


171. Excel Sheet Column Number

/**
 * @param {string} s
 * @return {number}
 */
var titleToNumber = function(s) {
     var sl = s.length;
     var sc,result=0,i=0;
     while(sl!==0){
        sc = s.charAt(sl-1);
        result = (sc.charCodeAt()-64)*Math.pow(26,i)+result;
        sl--;
        i++;
     }
     return result;
};

這題主要用到函數charAt();charCodeAt();Math.pow(x,y)至關於轉換成26進制的運算,字母和數字之間的轉換用ASCII碼完成。
Your runtime beats 22.00% of javascriptsubmissions.不知爲什麼個人方法老是如此辣雞- -。有機會第二次作的時候再追求效率吧node


242. Valid Anagram

這題個人方法是,代碼超時,很不幸數組

   //超時代碼
    var isAnagram = function(s, t) {
    s = s.split("");
    t = t.split("");
    var bb = true;
    if(s==""&&t==""){
        return true;
    }
    if(s.length!=t.length){
        return false;
    }
    var sl = s.length;
    for(i=0;i<=sl-1;i++){
        var sin = s.indexOf(t[i]);
        if(sin!=-1){
            delete s[sin];
            // s.splice(sin,1);
            // t.splice(0,1);
        }
        else{
            bb=false;
        }
    }
    return bb;
  
};

 

因而我去搜尋正確的解法,找到如下兩個數據結構

//簡單易懂又很厲害的方法
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {
    if(s.length !== t.length){
        return false;
    }
    var s1 = s.split("");
    var t1 = t.split("");
    s1.sort();
    t1.sort();
    var ss = s1.join("");
    var tt = t1.join("");
    if(ss !== tt){
      return false;
    }
    return true;
};

下面是哈希表方法,散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它經過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫作散列函數,存放記錄的數組叫作散列表函數

算是讓我感覺到了數據結構的力量!this

//哈希表什麼方法,反正比個人厲害
  /**
   * @param {string} s
   * @param {string} t
   * @return {boolean}
   */
  var isAnagram = function(s, t) {
      if(s.length !== t.length){
          return false;
      }
     var i, dict = {};
    for(i = 0; i < s.length; i++){
         if(!dict[s[i]]){
             dict[s[i]] = 1;
         }else{
             dict[s[i]]++;
         }
     }
     for(i = 0; i < t.length; i++){
         if(!dict[t[i]] || dict[t[i]] === 0){
             return false;
         }else{
             dict[t[i]]--;
         }
    }
     return true;
 };

 

好桑心啊,感受本身笨笨的- -。不早了要睡了。夢裏休息休息吧!spa

相關文章
相關標籤/搜索