leetcode刷題記錄 1 簡單

2021-10-07 23:52:32 字數 3437 閱讀 5561

題目:

給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。

說明:葉子節點是指沒有子節點的節點。

/**

* @param root

* @return

*/var binarytreepaths = function (root) `;

const res = ;

if (!root.left && !root.right)

binarytreepathsdeep(root.left, str, res);

binarytreepathsdeep(root.right, str, res);

return res;

};var binarytreepathsdeep = (root, str, res) => `;

if (!root.left && !root.right)

if (root.left)

if (root.right)

};

/**

* @param root

* @return

*/var binarytreepaths = function (root) );

while (stack.length) ->$` : `$`;

if (!item.node.left && !item.node.right) else );

}if (item.node.right) );}}

} return res;

};

/**

* @param root

* @return

*/var binarytreepaths = function (root, str) ->$` : `$`;

const res = ;

if (!root.left && !root.right)

return binarytreepaths(root.left, str).concat(

binarytreepaths(root.right, str)

);};

題目:給定乙個非負整數num,反覆將各個位上的數字相加,直到結果為一位數。

高階:

你可以不使用迴圈或者遞迴,且在 o(1) 時間複雜度內解決這個問題嗎?

思路:首先是遞迴或者迴圈

var adddigits = function(num) `;

let res = 0;

for (const i of s)

return res < 10 ? res : adddigits(res);

};

然後試試高階。

不使用遞迴或者迴圈,那麼就要觀察。

假設乙個四位數abcd,abcd分別是每一位上的數字。那麼這個數可以表示為 a*1000+b*100+c*10+d*1,也可以表示為a*999+a+b*99+b+c*9+c+d,最後我們得到了a+b+c+d。

這代表什麼意思呢?這個數對9取餘的結果等於a+b+c+d,也就是各位數之和。也就是說,a+b+c+d就是第一次的結果。同理,這個值我們再對9取餘,最終就是結果。

有個小小的問題,即使,結果是0,說明結果是9.所以我們要對0特殊處理。如以下這兩種。

/**

* @param num

* @return

*/var adddigits = function(num) ;

/**

* @param num

* @return

*/var adddigits = function(num) ;

題目:

編寫乙個程式判斷給定的數是否為醜數。

醜數就是只包含質因數2, 3, 5正整數

思路:我們把結果對2,35分別相除,如果沒有乙個的結果是整數,且值大於1,則不是醜數。否則是醜數

/**

* @param num

* @return

*/const a = [2, 3, 5];

var isugly = function (num)

});if (num == 1) return true;

if (!count) return false;

return isugly(num);

};

題目:給定乙個包含0, 1, 2, ..., n中 n 個數的序列,找出 0 .. n 中沒有出現在序列中的那個數。

思路:我們可以直接求和,然後依次相減,結果就是缺的那個數

/**

* @param nums

* @return

*/var missingnumber = function(nums) , sum);

};

題目:

你是產品經理,目前正在帶領乙個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。

假設你有 n 個版本 [1, 2, ..., n],你想找出導致之後所有版本出錯的第乙個錯誤的版本。

你可以通過呼叫 bool isbadversion(version) 介面來判斷版本號 version 是否在單元測試**錯。實現乙個函式來查詢第乙個錯誤的版本。你應該儘量減少對呼叫 api 的次數。

思路:首先呢,我們先用簡單的,即依次遍歷

/**

* @param isbadversion()

* @return

*/var solution = function(isbadversion) n total versions

* @return the first bad version

*/return function(n)

n--}

return 1

};};

缺點就是時間複雜度太高,是on。

這種查詢,其實最好的是二分法,時間複雜度是log2。這和排序陣列找某個數是類似的

/**

* @param isbadversion()

* @return

*/var solution = function(isbadversion) n total versions

* @return the first bad version

*/return function(n) else

}return n;

};};

leetcode刷題記錄 7 簡單

題目 給定乙個非空的字串,判斷它是否可以由它的乙個子串重複多次構成。給定的字串只含有小寫英文本母,並且長度不超過10000。思路 可以遍歷從下標0到長度的一半,如果當前的長度除總長度的餘數為0,說明長度可以整除。然後重複這個字串到總長度,和原字串相比,如果相等,則滿足條件。如果到l 2還沒找到相等的...

leetcode刷題記錄 9 簡單

題目 給出 n 名運動員的成績,找出他們的相對名次並授予前三名對應的獎牌。前三名運動員將會被分別授予 金牌 銀牌 和 銅牌 gold medal silver medal bronze medal 注 分數越高的選手,排名越靠前。思路 拷貝乙份陣列,先排序,然後對數字前三個賦值字串,後面賦值對應的下...

leetcode刷題記錄 12 簡單

題目 給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的乙個子樹包括 s 的乙個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。思路 遞迴比較。判斷兩顆樹是否有相同的結構,就是比較根節點的val值,如果相同,比較左右子樹的節點值。這樣就可以用遞迴...