leetcode簡單題

  今天上午刷了幾道簡單題,自己用javascript做的。雖然時間很高內存佔用也不少😥,記錄一下自己思路。

1、給出由小寫字母組成的字符串 S,重複項刪除操作會選擇兩個相鄰且相同的字母,並刪除它們。在 S 上反覆執行重複項刪除操作,直到無法繼續刪除。(1047題)

在完成所有重複項刪除操作後返回最終的字符串。答案保證唯一。

/*
* 輸入:"abbaca"
* 輸出:"ca"
*/
var removeDuplicates = function(S) {
    var arr=[];
    for(let i=0;i<S.length;i++){
        var val=S.charAt(i);
        if(arr.length==0){
            arr.push(val);
        }else{
            let k=arr[arr.length-1];
            if(k===val){
                arr.pop();
            }else{
                arr.push(val)
            }            
        }
    }
    return arr.join("");   //轉爲字符串輸出
};

  這題利用棧(數組)特性來實現。剛開始的思路做出來超時了,所以又換了個思路去考慮。題解是每次向棧中添加元素的時候判斷是不是和棧頂元素相同,如相同則不添加並且彈出棧頂元素,否則向棧中添加當前元素。

2、將十進制轉爲二進制,對二進制取反在求出十進制的整數。(主要考察二進制和十進制之間的轉換)

var bitwiseComplement = function(N) {
    var arr=[];
    var sum=0;
    while(N!=0){
   //利用unshift方法,每次向數組首部添加元素,這樣保證算出來的順序剛好是而二進制順序
        arr.unshift(N%2);
        N=Math.floor(N/2);   //注意向下取整
    }
    for(let i=0;i<arr.length;i++){
        if(arr[i]==1){
            arr[i]=0;
            sum+=arr[i]*Math.pow(2,arr.length-i-1);  //注意此處轉十進制
        }else{
            arr[i]=1;
            sum+=arr[i]*Math.pow(2,arr.length-i-1);
        }
    }
    return arr;
};

3、求一個字符串的最長無重複子串

function findMaxLength(str){
    var S="";   //用來存放最長字符串
    for(let i=0;i<str.length;i++){
        let val=str.charAt(i);
        if(S.indexOf(val)==-1){
            S+=val;
        }else{
            let n = S.indexOf(val);
            S=S.substr(n+1)+val;  //若相同,查找到位置
        }
    }
    return S;
}
console.log(findMaxLength('abcdaafacse'))  //'facse'

  注:查找相同的情況下,比如 S=“abcd”,val=‘a’;去查找得出n=0。利用substr(開始位置)+當前元素 => S=“bcda”,這樣依次查找。

4、格式化數字

function formatNumber(n){
    n = n+"";
    let f = n.split('.')[1];   //針對有小數的情況,沒有小數的情況可以稍加判斷
    let num = n.split('.')[0];
    let count = num.length;
    var arr=[];
    while(count>=3){
        arr.unshift(num.slice(count-3,count));
        count-=3;
    }
    if(count){
        arr.unshift(num.slice(0,count%3));
    }
    return arr.toString() + "." + f;
}
console.log(formatNumber(12345678.9))

  最後一題上次面試的時候讓手寫了😄,其實前端面試時也不會說出太難的編程題,把leetcode上的簡單題刷刷就可以了。最重要的還是思路,思路,思路。做題得有思路,不然無從下手。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章