[LeetCode C++实现]524. Longest Word in Dictionary through Deleting

这道题对我来说开始没有思路,主要是没有抽象出来删除字符变为target应该如何简单实现?

看了一眼讨论区代码,知道如何实现后,又卡在了判断条件处,先根据长度简单判断,最后更新结果时判断能否通过删除字符得到target.

class Solution {

public:

string findLongestWord(string s, vector<string>& d) {

string res;

for(int i = 0;i < d.size();i++)

{

if(d[i].size() >res.size() ||

(d[i].size() =......

[LeetCode C++实现]720. Longest Word in Dictionary

非常巧妙的方法:

class Solution {

public:

string longestWord(vector<string>& words) {

unordered_set<string> hash;

sort(words.begin(),words.end());

string res;

for(auto word:words){

if(word.size() == 1 ||

hash.count(word.substr(0,word.size()-1))){

hash.insert(word);

res = (word.size() >......

[LeetCode C++实现]894. All Possible Full Binary Trees

方法一:递归

/**

* Definition for a binary tree node.

* struct TreeNode {

* int val;

* TreeNode *left;

* TreeNode *right;

* TreeNode() : val(0), left(nullptr), right(nullptr) {}

* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

* TreeNode(int x, TreeNode *left, TreeNode ......

[LeetCode C++实现]1382. Balance a Binary Search Tree

看了一眼提示,首先将二叉搜索树有序保存到vector中,然后再从vector中恢复为平衡搜索二叉树。

/**

* Definition for a binary tree node.

* struct TreeNode {

* int val;

* TreeNode *left;

* TreeNode *right;

* TreeNode() : val(0), left(nullptr), right(nullptr) {}

* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

......

[LeetCode C++实现]950. Reveal Cards In Increasing Order

class Solution {

public:

vector<int> deckRevealedIncreasing(vector<int>& deck) {

sort(deck.rbegin(),deck.rend());

deque<int> dq;

dq.push_back(deck[0]);

for(int i = 1;i < deck.size();i++)

{

dq.push_front(dq.back());

dq.pop_back();

dq.push_front(deck[i]);

}

vector<int>......

[LeetCode C++实现]1079. Letter Tile Possibilities

回溯法实现:

class Solution {

public:

int numTilePossibilities(string tiles) {

vector<int> record(26,0);

for(auto c:tiles)

{

record[c-'A']++;

}

return dfs(record);

}

private:

int dfs(vector<int>& record) {

int sum = 0;

for(int i = 0;i < record.size();i++)

{

if(record[i] == 0) continu......

[LeetCode C++实现]621. Task Scheduler

解题思路主要来自花花酱的这张图,首先计算出现频率最高的任务(字符),由于相同的任务间隔需要n个时间片,因此每个分组n+1,k-1个分组,最后加上频率都是最大值的任务。

这种算法存在一种特例就是频率最大的任务,无需插入idle即可无缝完成所有任务。

AC ......

[LeetCode C++实现]337. House Robber III

把这道题想简单了,本来以为把奇数层累加起来,把偶数层累加起来,然后判断最大值即可,但是忽略了如下case的情形[4,1,null,2,null,3],这里利益最大化是第一层加第四层,那么问题如何处理呢?

按层相加的C++ code

/**

* Definition for a binary tree node.

* struct TreeNode {

* int val;

* TreeNode *left;

* TreeNode *right;

* TreeNode(int x) : val(x), left(NULL), right(NULL) {}

......

[LeetCode C++实现]213. House Robber II

继续使用198中AC的代码发现存在问题,例如case [2,3,2],由于第一间房屋和最后一间房屋连起来,因此198中的代码不能处理这种情形,那么问题来了,如何处理这种有限制的dp呢?

class Solution {

public:

int rob(vector<int>& nums) {

int size = nums.size(),res = 0;

if(size == 0) return 0;

if(size == 1) return nums[0];

//dp solution

vector<int> dp(size,0);

dp[0] = n......

[LeetCode C++实现]114. Flatten Binary Tree to Linked List

递归实现:

/**

* Definition for a binary tree node.

* struct TreeNode {

* int val;

* TreeNode *left;

* TreeNode *right;

* TreeNode() : val(0), left(nullptr), right(nullptr) {}

* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

* TreeNode(int x, TreeNode *left, TreeNod......