原创 leetcode809

這道題沒什麼好說的 class Solution { public: int expressiveWords(string S, vector<string>& words) { vector<pair<char

原创 leetcode394

其實是先把數字摳出來,然後再把括號內的一串給摳出來,用函數處理遞歸。 class Solution { public: string decodeString(string s) { if(s.size() ==

原创 leetcode337

      這道題的關鍵是是否取當前結點的值,還是取左右孩子的值。如果搜索到了當前的結點,就表示當前結點的值是可以被納入總和之中的,否則就看它的左右孩子的值,而左右孩子的值此時可以被納入總和,因此可以用函數來表示當前的值。       

原创 leetcode368

dp 因爲一開始的數一定是後面的某幾個數的因子,相當於從一個點發散了多條路徑,因此要記住上一點是誰 class Solution { public: vector<int> largestDivisibleSubset(vect

原创 leetcode343

這道題的關鍵是設組成n中的一個數是不用拆分的,否則全部拆分的話都成1了。然後比較n-i和mp[n-i]誰和i乘起來比較大。 class Solution { public: unordered_map<int,int>mp;

原创 leetcode365

     這道題的關鍵是隻有兩個瓶子,因此每次只能變化x或者y量的水,因此z = ax + by。而z在爲x,y的最大公約數倍數時有解。 class Solution { public: bool canMeasureWater

原创 九宮格數獨

     叔叔提了個數獨的問題,據說是最難九宮格,並提議我和弟弟考慮編程實現,貼一下我的代碼       #include <iostream> #include <bits/stdc++.h> #define N 9 using na

原创 leetcode207

現在你總共有 n 門課需要選,記爲 0 到 n-1。 在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用一個匹配來表示他們: [0,1] 給定課程總量以及它們的先決條件,判斷是否可能完成所有課程

原创 leetcode216

這道題其實是組合二的變種,限制一下填入的元素是1-9即可,簡單的回溯,如果不想重複,每次都往後面更大的數取值。 class Solution { private: vector<vector<int>>ans; public:

原创 leetcode86

對不起我厚顏無恥 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *

原创 leetcode300

動態規劃 主要思想是:dp[i]從以比它小的元素作爲結尾的子序列中找起,看看誰的子序列最長,然後nums[i]又比人家小,就接上去。 class Solution { public: int lengthOfLIS(vector

原创 leetcode227

逆波蘭 主要思想,先搞乘除,最後一 class Solution { public: int getNum(int num1,int num2,char op) { if(op == '+')

原创 leetcode264

看了其他同學的三指針法,沒有看懂。 後面終於想通了,來寫一寫~ 思路其實是你一直都要找到最小的那個醜數,然後從它開始乘2,3,5; 但是隻有能產出最小的醜數的idx可以++,因爲其他兩個數產出的是比最小的醜數要大的,所以先不加加,而產出的

原创 leetcode93

遞歸哦 class Solution { private: vector<string>ans; public: vector<string> restoreIpAddresses(string s) {

原创 leetcode130

class Solution { public: int dx[4] = {0,-1,0,1}; int dy[4] = {-1,0,1,0}; void solve(vector<vector<char>>&