LeetCode Weekly Contest 25
1. 507. Perfect Number
显然小于2的都不满足(尤其是负数的情况),进一步,显然质数都不满足,所以小于4的数,直接return false。
然后依次暴力枚举判断到sqrt(n),注意n = t * t的时候,t只需要加一次。好像不写这个也不会出错,因为没有这样的数满足条件。我没验证,需要的验证一下。
class Solution {
public:
bool checkPerfectNumber(int num) {
if(num <= ) return ;
int res = ;
int d = floor(sqrt(num));
for (int i = ; i <= d; i++) {
if(i == num) break;
if(num % i == ) {
res += i;
if(i != num / i) res += num / i;
if(res > num) return ;
}
}
return res == num;
}
};
2. 537. Complex Number Multiplication
按照题意完成就可以。
class Solution {
public:
string complexNumberMultiply(string a, string b) {
int x = , y = , m = , n = ;
sscanf(a.c_str(), "%d+%di", &x, &y);
sscanf(b.c_str(), "%d+%di", &m, &n);
stringstream ss;
int t1 = x * m - y * n, t2 = x * n + y * m;
ss << t1 << "+" << t2 << "i";
return ss.str();
}
};
3. 545. Boundary of Binary Tree
左扫一遍,叶子扫一遍,右边扫一遍,注意边界条件。编码比较多,注意特判。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> res;
vector<int> ri;
bool f;
void workleft(TreeNode* root) {
if(!root) return;
res.push_back(root->val);
if(root->left)
workleft(root->left);
else
workleft(root->right);
}
void work(TreeNode* root) {
if(!root) return;
if(!root->left && !root->right) {
if(!f) f = ;
else res.push_back(root->val);
}
work(root->left);
work(root->right);
}
void workright(TreeNode* root) {
if(!root) return;
ri.push_back(root->val);
if(root->right)
workright(root->right);
else
workright(root->left);
}
vector<int> boundaryOfBinaryTree(TreeNode* root) {
res.clear();
if(!root) return res;
res.push_back(root->val);
workleft(root->left);
if(root->left)
f = ;
else
f = ;
work(root->left);
work(root->right);
ri.clear();
workright(root->right);
reverse(ri.begin(), ri.end());
//cout << res.size() << " " << ri.size() << endl;
for (int i = ; i < ri.size(); i++) {
res.push_back(ri[i]);
//cout << ri[i] << endl;
}
return res;
}
};
4. 546. Remove Boxes
不会做,没有想法。看完题目,感觉跟burst ballon挺像的,因为枚举先删除的话,左右2边的会合在一起,使得后续的处理边的麻烦,应该是需要最后考虑,怎么进行合并,使得2边的问题变得独立。
从discuss里面看的答案。好像先把数组处理成字符,个数的形式,不是很好处理,需要寻找一种好的枚举方法,对问题进行化简。
刚开始,观察,如果一个字符只出现一次,那么这个字符对结果的贡献就是1,也就是说可以直接删除它,删除后左右2边的部分进行合并,这里有个问题,这个单独字符删除的时间,是否会影响最后的结果,不太确定。
我的想法是,处理成数字,个数的形式,然后依次枚举删除的字符。每次调用的时候,先进行单个字符的处理,然后合并相邻的,再递归调用,结果是tle。完全是暴力的解法。
下面的解法是,每次处理末尾的字符,使得问题规模缩小,然后考虑末尾的字符,可能跟前面的字符进行合并,然后进行搜索,有些段可能多次计算,采用记忆化搜索。这个想法的关键是,找到一种搜索的办法,缩减问题规模,同时不遗漏可能的解。
int dp[][][];
int work(vector<int>& b, int l, int r, int k) {
if(l > r) return ;
int& res = dp[l][r][k];
if(res != ) return res;
while(l < r && b[r - ] == b[r]) {
k++;
r--;
}
res = work(b, l, r - , ) + (k + ) * (k + );
for (int i = l; i < r; i++) {
if(b[i] == b[r]) {
res = max(res, work(b, l, i, k + ) + work(b, i + , r - , ));
}
}
return res;
}
int removeBoxes(vector<int>& boxes) {
memset(dp, , sizeof dp);
int n = boxes.size();
return work(boxes, , n - , );
}
LeetCode Weekly Contest 25的更多相关文章
- LeetCode Weekly Contest 8
LeetCode Weekly Contest 8 415. Add Strings User Accepted: 765 User Tried: 822 Total Accepted: 789 To ...
- leetcode weekly contest 43
leetcode weekly contest 43 leetcode649. Dota2 Senate leetcode649.Dota2 Senate 思路: 模拟规则round by round ...
- LeetCode Weekly Contest 23
LeetCode Weekly Contest 23 1. Reverse String II Given a string and an integer k, you need to reverse ...
- Leetcode Weekly Contest 86
Weekly Contest 86 A:840. 矩阵中的幻方 3 x 3 的幻方是一个填充有从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等. 给定一个 ...
- LeetCode Weekly Contest
链接:https://leetcode.com/contest/leetcode-weekly-contest-33/ A.Longest Harmonious Subsequence 思路:hash ...
- 【LeetCode Weekly Contest 26 Q4】Split Array with Equal Sum
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/split-array-with-equal-sum/ ...
- 【LeetCode Weekly Contest 26 Q3】Friend Circles
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/friend-circles/ [题意] 告诉你任意两个 ...
- 【LeetCode Weekly Contest 26 Q2】Longest Uncommon Subsequence II
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...
- 【LeetCode Weekly Contest 26 Q1】Longest Uncommon Subsequence I
[题目链接]:https://leetcode.com/contest/leetcode-weekly-contest-26/problems/longest-uncommon-subsequence ...
随机推荐
- Java中final,finally和finalize区别
Day11_SHJavaTraing_4-18-2017 Java中final,finally和finalize区别 1.final—修饰符(关键字) ①final修饰类,表示该类不可被继承 ②fin ...
- Linux 之secureCRT连接SSH
1.登陆linux系统,打开终端命令.输入 rpm -qa |grep ssh 查找当前系统是否已经安装. 2.如果没有安装SSH软件包,可以通过yum 或rpm安装包进行安装. .3.安装好了之后 ...
- CorelDRAW2019版本下载,CorelDRAW最新版新增功能(全)
使用CorelDRAW 2019,随时随地进行设计创作.无论您使用的是 Windows 或 Mac,都能在为您的平台量身设计的直观界面中,随心所欲地自由创作.无论您是热衷于像素,执迷于无缝输出或沉浸于 ...
- WPF动态折线图
此项目源码下载地址:https://github.com/lizhiqiang0204/WpfDynamicChart 效果图如下: 此项目把折线图制作成了一个控件,在主界面设置好参数直接调用即可,下 ...
- python tips:小整数对象池与字符串intern
本文为is同一性运算符的详细解释.is用于判断两个对象是否为同一个对象,具体来说是两个对象在内存中的位置是否相同. python为了提高效率,节省内存,在实现上大量使用了缓冲池技术和字符串intern ...
- appium的等待
在自动化过程中,元素出现受网络环境,设备性能等多种因素影响.因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已.那么如何解决这个问题呢? ...
- eas之数据融合
1.如何进行自由融合自由融合无须指定区域,KDTable将根据指定的融合模式,融合相邻且值相等的单元.// 自由行融合table.getMergeManager().setMergeMode(KDTM ...
- 项目部署到tomcat出错(tomcat运行时的JDK版本)
先展示一下错误,把项目部署到tomcat运行 出错原因 简单来说,就是执行代码的jdk版本 低于 编译的jdk版本 最后面的52.0是一种叫什么魔码,有各自对应的jdk版本. 其中52.0 对应的就是 ...
- Html5最简单的游戏Demo——Canvas绘图的骰子
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- asp.net--CRSF
asp.net使用了token来防止CRSF攻击 前台: 使用@Html.AntiForgeryToken(); 浏览器里面被存了一个cookie值,这个值是asp.net存给浏览器的,是readon ...