題目:
給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。
說明:葉子節點是指沒有子節點的節點。
/**
* @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值,如果相同,比較左右子樹的節點值。這樣就可以用遞迴...