LeetCode 11.25

63 阅读1分钟

LeetCode 7 整数反转

//暴力,需要注意最大边界值。
var reverse = function(x) {
    let res = [];
    let bool = 0;
    bool = x>=0?0:1;
    x = x>=0?x:-x;
    let store = 0;
    while(x!=0){
        store = x%10;
        res.push(store);
        x = Math.floor(x/10);
    }
    console.log(res);
    for(let i of res){
        x = x*10 + i;
    }
    if(x>2147483647) return 0;
    return x = bool===0?x:-x;
};
//优化写法,这里取整不能用Math.floor(),不适用于负数。
var reverse = function (x) {
    let res = 0;
    while (x) {
        res = res * 10 + x % 10
        // 判断越界
        if (res > Math.pow(2, 31) - 1 || res < Math.pow(-2, 31)) return 0;
        // 对 x 进行取整,只取整数部分
        x = ~~(x / 10);
    }
    return res
};
//将数字转为字符串翻转,再转为数字,判断边界。
var reverse = function(x) {
    let res = parseInt(x.toString().split("").reverse().join(""));
    res = x>=0?res:-res;
    return res>Math.pow(2,31)-1||res<Math.pow(-2,31)?0:res;
};

LeetCode 387 字符串中的第一个唯一字符

//对数组进行两次遍历,只有遍历到结尾且与之相等的数字只有其本身时,才找到了第一个唯一值。
var firstUniqChar = function(s) {
    let len = s.length;
    for(let i = 0;i<len;){
        for(let j = 0; j<len;j++){
            if(s[i]===s[j]&&i!=j){
                i++;
                break;
            }
            else{
                if(j===len-1){
                    return i;
                }
            }
        }
    }
    return -1;
};
//借助哈希表
var firstUniqChar = function(s) {
    let map = new Map();
    for(let i of s){
        if(map.has(i)){
            map.set(i,map.get(i)+1)
        }
        else{
            map.set(i,1);
        }
    }
    for(let i in s){
        Number(i);
        if(map.get(s[i])===1) return i;
    }
    return -1;
};

LeetCode 242有效的字母异位词

//暴力
var isAnagram = function(s, t) {
    let map1= new Map();
    let map2 = new Map();
    if(s.length!==t.length) return false;
    for(let i in s){
        Number(i);
        if(map1.has(s[i])){
            map1.set(s[i],map1.get(s[i])+1);
        }
        else{
            map1.set(s[i],1);
        }
        if(map2.has(t[i])){
            map2.set(t[i],map2.get(t[i])+1);
        }
        else{
            map2.set(t[i],1);
        }
    }
    for(let i in s){
        if(map1.get(s[i])!==map2.get(s[i])){
            return false;
        }
    }
    return true;
};
//官方一句话,谁能想到用解构赋值,我可能一个个读一个个push,再join。
var isAnagram = function(s, t) {
    return s.length===t.length&&[...s].sort().join("")===[...t].sort().join("");
    //return s.length===t.length&&Array.from(s).sort().join("")===Array.from(t).sort().join("");
};
//优化后的哈希,前面解数独也用到了这种索引对应的思想。
var isAnagram = function(s, t) {
    if(s.length!==t.length) return false;
    let arr = new Array(26).fill(0);
    for(let i in s){
        Number(i);
        arr[s[i].charCodeAt()-'a'.charCodeAt()]++;
        arr[t[i].charCodeAt()-'a'.charCodeAt()]--;
    }
    for(let i in s){
        Number(i);
        if(arr[s[i].charCodeAt()-'a'.charCodeAt()]!==0){
            return false;
        }
    }
    return true;
};

LeetCode 125 验证回文串

//纯判断数字和字母了
var isPalindrome = function(s) {
    if(s.length===0) return true;
    let left = 0;
    let right = s.length-1;
    while(left<right){
        if(isNumchar(s[left])!=0){
            if(isNumchar(s[right])!=0){
                if(isNumchar(s[left])===isNumchar(s[right])){
                    left++;
                    right--;
                }
                else{
                    console.log(s[left],s[right],isNumchar(s[left]),isNumchar(s[right]))
                    return false;
                }
            }
            else{
                right--;
            }
        }
        else{
            left++;
        }
    }
    return true;
};
var isNumchar = (x) =>{
    let tmp = x.charCodeAt();
    if(tmp>='0'.charCodeAt()&&tmp<='9'.charCodeAt()){
        return tmp
    }
    if(tmp>='A'.charCodeAt()&&tmp<='Z'.charCodeAt()){
        return tmp+'a'.charCodeAt()-'A'.charCodeAt();
    }
    if(tmp>='a'.charCodeAt()&&tmp<='z'.charCodeAt()){
        return tmp;
    }
    re