355. Design Twitter
題目網址:https://leetcode.cn/problems/design-twitter/
題意:設計一個簡化版的 Twitter, 可以讓用戶實現發送推文、關注 / 取消關注 其他用戶, 以及能夠看見關注人(包括自己)的最近 10 條推文。
Twitter():初始化 twitter instance。
void postTweet(int userId, int tweetId):根據給定的 tweetId 和 userId 創建一條新推文。每次調用此函數都會使用一個不同的 tweetId。
List<Integer> getNewsFeed(int userId):檢索當前用戶新聞推送中最近 10 條推文的 ID。
新聞推送中的每一項都必須是由用戶關注的人 or 用戶自己發布的推文。
推文必須按照時間順序由最近到最遠排序。
void follow(int followerId, int followeeId):ID 為 followerId 的用戶開始關注 ID 為 followeeId 的用戶。
void unfollow(int foll ...
78. Subsets
題目網址:https://leetcode.cn/problems/subsets/
題意:給一 array nums, 當中的元素互不相同, 返回所有可能的 subset。
Solution:
想法:利用 DFS + Backtracking, 每個元素都有取 or 不取兩種選擇
class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { dfs(nums, 0, nums.size()); return res; }private: vector<int> cur; vector<vector<int>> res; void dfs(vector<int>& nums, int i, int n){ if (i == n) { res.emplac ...
39. Combination Sum
題目網址:https://leetcode.cn/problems/combination-sum/
題意:給一無重複數的 array candidates 和一整數 target, 找出 candidates 中可以使數字和等於 target 的所有不同組合, 以任意順序返回。
其中, candidates[i] 皆 > 0
注意:candidates 同一個數字可以無限次重複選取, 如果至少一個數字的被選數量不同, 則兩種組合是不同的
Solution 1:
想法:利用 DFS + Backtracking, 其中每個元素 candidates[i] 有兩種選擇:
選, 並從此位置 i 繼續選要不要重複選取
不選, 從下一個位置 i + 1 的元素繼續開始
class Solution {public: vector<vector<int>> combinationSum(vector<int>& candidates, int target) { dfs(candida ...
46. Permutations
題目網址:https://leetcode.cn/problems/permutations/
題意:給一不含重複數字的 array nums, 求所有可能的排列, 以任意順序返回。
Solution:
想法:DFS, nums[i] 輪流當頭
e.g. nums = [1, 2, 3]
1 當頭 : [1, 2, 3], [1, 3, 2]
2 當頭 : [2, 1, 3], [2, 3, 1]
3 當頭 : [3, 2, 1], [3, 1, 2]
class Solution {public: vector<vector<int>> permute(vector<int>& nums) { dfs(nums, 0, nums.size()); return res; }private: vector<vector<int>> res; void dfs(vector<int>& nums, ...
90. Subsets II
題目網址:https://leetcode.cn/problems/subsets-ii/
題意:給一 array nums, 當中的元素可能會重複, 返回所有可能的 subset res。
注意:res 不能包含重複的 subset, 可以按順序任意排列
Solution:
想法:利用 DFS, 先將 nums 排序(讓相同值的數相鄰), 然後跟 78. Subsets 一樣
不一樣的是, res 中不能有重複的 subset
只是若不取, 則後面跟當前值一樣的數, 都要跳過, 從值不一樣的繼續
e.g. nums = [1, 2, 2, 3]下圖中紅色圈起來的部分, 即是選 1 之後不選 2, 所以後面值為 2 的都要跳過, 下一個從 3 開始取
class Solution {public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(), nums.end()); df ...