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 ...
随机推荐
- 用SQL Server查询所有数据并显示
利用SQL Server查询数据,并把所有数据显示在页面上. "%> <%@page import="jdbc.sqlServer"%> <%@p ...
- chown chmod chgrp chattr chroot usermod 命令简单分析
chown用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”.[root@localtion ~]# chown root:bin test[root ...
- Lazarus开发环境编译选项配置
Lazarus的环境配置让人有点犯晕,对于刚从delphi转到lazarus上的我来说,每次新建工程都会遇到一堆Can't find unit xxxx used by xxxx的问题,问题虽然不大, ...
- 【sqli-labs】 less39 GET -Stacked Query Injection -Intiger based (GET型堆叠查询整型注入)
http://192.168.136.128/sqli-labs-master/Less-39/?id=1;insert into users(id,username,password) values ...
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...
- matplotlib的annotate用法小结
这个是matplotlib自定义的annotate方法的文本: 一. def annotate(self, s, xy, *args, **kwargs): a = mtext.Annotation( ...
- jQuery动态效果
1.一号店首页 2.淘宝网购物车
- JavaScript对接百度地图api实现地图标点功能
粗略的做了个地图标点功能 首先,去百度注册开发者账号,然后进入到百度地图开放平台 进入到控制台, 创建浏览器端应用,给个安全域名 然后去开发者文档JavaScript里面找地图展示文档,直接怼上去就行 ...
- 【[Offer收割]编程练习赛10 C】区间价值
[题目链接]:http://hihocoder.com/problemset/problem/1483 [题意] 中文题 [题解] 二分最后的答案; 二分的时候; 对于每一个枚举的值x; 计算小于等于 ...
- Ubuntu 14.04远程登录服务器
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51285545 本文讲述在Ubuntu ...