leetcode 0214
✅ 965. 单值二叉树
https://leetcode-cn.com/problems/univalued-binary-tree/
描述
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
解答
c++
/**
* 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:
bool isUnivalTree(TreeNode* root) {
int markfirst = root->val;
std::queue<TreeNode* > q;
q.push(root);
while(!q.empty()){
TreeNode* tmp = q.front();
if (tmp->val != markfirst) return false;
else {
q.pop();
if(tmp->left != NULL){
q.push(tmp->left);
}
if(tmp->right != NULL){
q.push(tmp->right);
}
}
}
return true;
}
};
/*执行用时 :
12 ms
, 在所有 C++ 提交中击败了
30.77%
的用户
内存消耗 :
10.7 MB
, 在所有 C++ 提交中击败了
26.52%
的用户*/
updated dfs c++
/**
* 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:
bool dfs(TreeNode *root, int val) {
if(!root){
return true;
}
if(root->val != val) return false;
return dfs(root->left, val) && dfs(root->right, val);
}
bool isUnivalTree(TreeNode* root) {
if(!root) return true;
int mark1st = root->val;
return dfs(root, mark1st);
}
};
/*执行用时 :
8 ms
, 在所有 C++ 提交中击败了
30.77%
的用户
内存消耗 :
10.7 MB
, 在所有 C++ 提交中击败了
9.98%
的用户*/
py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.res = set()
def isUnivalTree(self, root: TreeNode) -> bool:
if root is None:
return
self.res.add(root.val)
self.isUnivalTree(root.left)
self.isUnivalTree(root.right)
return len(self.res) == 1
'''
执行用时 :
28 ms
, 在所有 Python3 提交中击败了
93.25%
的用户
内存消耗 :
13 MB
, 在所有 Python3 提交中击败了
46.72%
的用户
'''
py 生成器
生成器大法好
class Solution(object):
def isUnivalTree(self, root):
root = iterable(root)
return len(set(root)) == 1
def iterable(p):
if p:
yield p.val
yield from iterable(p.left)
yield from iterable(p.right)
✅ 762. 二进制表示中质数个计算置位
https://leetcode-cn.com/problems/prime-number-of-set-bits-in-binary-representation/
描述
给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。
(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。)
示例 1:
输入: L = 6, R = 10
输出: 4
解释:
6 -> 110 (2 个计算置位,2 是质数)
7 -> 111 (3 个计算置位,3 是质数)
9 -> 1001 (2 个计算置位,2 是质数)
10-> 1010 (2 个计算置位,2 是质数)
解答
cpp other
class Solution {
public:
int countPrimeSetBits(int L, int R) {
int count = 0;
for (int i = L;i <= R;i++) {
if (isPrime(countCore(i))) count++;
}
return count;
}
int countCore(int num) {
int count = 0;
while (num) {
num &= (num - 1);
count++;
}
return count;
}
bool isPrime(int num) {
if (num == 2) return true;
// 除2以外的其余偶数
if (num == 1 || (num & 0x1) == 0) return false;
for (int i = 3;i <= sqrt(num);i+=2) {
if (num % i == 0) return false;
}
return true;
}
};
---
class Solution {
public:
int countPrimeSetBits(int L, int R) {
set<int>prime_num = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31};
int cnt = 0;
for(int i=L; i<=R; i++)
{
bitset<32>num(i);
if(prime_num.count(num.count()) == 1)
cnt ++;
}
return cnt;
}
};
cpp mine
class Solution {
public:
int countPrimeSetBits(int L, int R) {
set<int> allThePrimeNums = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31};
int cnt = 0;
for (int i = L; i <= R; i++) {
bitset<32> num(i);
if(allThePrimeNums.count(num.count()) == 1) cnt++;
}
return cnt;
}
};
/*执行用时 :
16 ms
, 在所有 C++ 提交中击败了
70.86%
的用户
内存消耗 :
8.7 MB
, 在所有 C++ 提交中击败了
5.47%
的用户*/
java isPrime
高效写法,copy me!
private boolean isPrimeNum(int i) {
for (int j = i == 2 ? 3 : 2; j <= Math.sqrt(i) + 1; j++) {
if (i % j == 0) return false;
}
return true;
}
py
class Solution:
def countPrimeSetBits(self, L: int, R: int) -> int:
temp = [2, 3, 5, 7, 11, 13, 17, 19]
return len([i for i in range(L, R+1) if bin(i).count('1') in temp])
'''
执行用时 :
248 ms
, 在所有 Python3 提交中击败了
73.46%
的用户
内存消耗 :
13.1 MB
, 在所有 Python3 提交中击败了
52.38%
的用户
'''
✅ 1047. 删除字符串中的所有相邻重复项
https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
描述
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
解答
c++ other
class Solution {
public:
string removeDuplicates(string S) {
int top = 0;
for (char ch : S) {
if (top == 0 || S[top - 1] != ch) {
S[top++] = ch;
} else {
top--;
}
}
S.resize(top);
return S;
}
};
// 模拟一遍了,发现真NB ⬆️
// copy me ⬇️ todo 0214
class Solution {
public:
string removeDuplicates(string S) {
deque<char> q;
for(int i=0;i<S.size();i++){
if(!q.empty()&&q.back()==S[i])
q.pop_back();
else
q.push_back(S[i]);
}
string ans = "";
while(!q.empty())
{
ans.push_back(q.front());
q.pop_front();
}
return ans;
}
};
py
'''
方法一:替换函数
我们可以用字符串自带的替换函数,由于字符串仅包含小写字母,因此只有 26 种不同的重复项。
将 aa 到 zz 的 26 种重复项放入集合中;
遍历这 26 种重复项,并用字符串的替换函数把重复项替换成空串。
注意,在进行过一次替换之后,可能会出现新的重复项。例如对于字符串 abbaca,如果替换了重复项 bb,字符串会变为 aaca,出现了新的重复项 aa。因此,上面的过程需要背重复若干次,直到字符串在一整轮替换过程后保持不变(即长度不变)为止。
'''
from string import ascii_lowercase
class Solution:
def removeDuplicates(self, S: str) -> str:
# generate 26 possible duplicates
duplicates = {2 * ch for ch in ascii_lowercase}
prev_length = -1
while prev_length != len(S):
prev_length = len(S)
for d in duplicates:
S = S.replace(d, '')
return S
'''
方法二:栈
我们可以用栈来维护没有重复项的字母序列:
若当前的字母和栈顶的字母相同,则弹出栈顶的字母;
若当前的字母和栈顶的字母不同,则放入当前的字母。
'''
class Solution:
def removeDuplicates(self, S: str) -> str:
output = []
for ch in S:
if output and ch == output[-1]:
output.pop()
else:
output.append(ch)
return ''.join(output)
模仿上面的py 的c++ 代码出错了:todo 0214
到底是 不会很精确的c++ api
#include <algorithm>
class Solution {
public:
string removeDuplicates(string S) {
stack<char> ss;
for(char ch: S) {
if(&ss != NULL && (ch == ss.top())) {
ss.pop();
}
else {
ss.push(ch);
}
}
char *ret = "";
int i = 0;
printf("ss size: %d", ss.size());
while(!ss.empty()){
if(ss.top()){
ret[i++] = ss.pop();
}
}
ret[i] = '\0';
reverse(ret[0], ret[i-1]);
return ret;
}
};
/*编译出错solution.cpp: In member function removeDuplicates
Line 19: Char 33: error: void value not ignored as it ought to be
ret[i++] = ss.pop();
^*/
✅ 171. Excel表列序号(26进制转10进制)
https://leetcode-cn.com/problems/excel-sheet-column-number/
描述
给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: "A"
输出: 1
示例 2:
输入: "AB"
输出: 28
解答
26进制转10进制
c
class Solution {
public:
int titleToNumber(string s) {
int ret = 0;// you must init local var to 0; while global var can auto init to 0
for (int i = 0; i < s.size(); i++) {
ret = ret * 26 + (s[i] - 'A' + 1);
}
return ret;
}
};
java
py
class Solution:
def titleToNumber(self, s: str) -> int:
ans = 0;
for ch in s:
ans *= 26;
ans += ord(ch) - ord('A') + 1
return ans
'''
几秒前 通过 36 ms 13.1 MB Python3
几秒前 通过 4 ms 8.2 MB Cpp
'''
leetcode 0214的更多相关文章
- leetcode 0211
目录 ✅ 1217. 玩筹码 描述 解答 c java py ✅ 206. 反转链表 描述 解答 c java py ✅ 922. 按奇偶排序数组 II 描述 解答 c 双指针soldier tddo ...
- 【LeetCode】LCP 07. 传递信息
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS 日期 题目地址:https://leetcod ...
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
随机推荐
- 每天进步一点点------Allegro使用脚本记录文件设置工作环境的颜色
script脚本文件在Allegro PCB DESIGN中能完成很多参数设定,功能很强大.使用script脚本我们能够快速定制自己的Allegro workbench environment. 案例 ...
- 每天进步一点点------Allegro中SYMBOL种类
Allegro 中SYMBOL 种类在Allegro 中, Symbol 有五种, 它们分别是Package Symbol .Mechanical Symbol.Format Symbol.Shape ...
- 每天进步一点点------创建Microblaze软核(一)
在使用FPGA时,有时会用到它做为主控芯片.对于习惯于单片机及C语言开发的人,使用FPGA做主控芯片,首先还是想到它的嵌入式软核功能.如果能够基于Microblze软核进行C语言程序的开发,相对于使用 ...
- MS Sqlserver删除字段最后的多余字符
存在这样一些数据 ,,,,dga bc,,aaaa,,,,,,,,dga bc,,aaaa,,,,,,,dga bc,,aaaa,,,,,,,dga bc,,aaaa,,,,,, 需要将最后多余的逗号 ...
- 7_5 困难的串(UVa129)<回溯法:避免无用判断>
“超级氪因素大赛”(译注:英国的一档电视心智竞答节目)的主办方雇你来对付那些足智多谋的参赛选手.在比赛的一个环节中,节目主持人将念出一长串的字母来考验选手的记忆能力.因为许多选手都是分析字串模式的高手 ...
- 边双连通分量 jarjan (poj 3177)
大意:给定一个无向连通图,判断至少加多少的边,才能使任意两点之间至少有两条的独立的路(没有公共的边,但可以经过同一个中间的顶点). 思路:在同一个双连通分量里的所有的点可以看做一个点,收缩后,新图是一 ...
- 断点调试,issubclass和ininstance的使用
一等公民 只要可以把一个东西赋值给一个变量,这个东西就叫一等公民 断点调试 在想要加断点的地方用鼠标点击一下,你会看到一个红色圆圈 变红的地方,程序执行到,就会暂停 断电应该加载报错之前 绿色箭头表示 ...
- c++中sort函数调用报错Expression : invalid operator <的内部原理
当我们调用sort函数进行排序时,中的比较函数如果写成如下 bool cmp(const int &a, const int &b) { if(a!=b) return a<b; ...
- JQuery中的DOM操作(转载)
原文链接:http://www.cnblogs.com/ILYljhl/archive/2013/07/10/3182414.html jQuery封装了大量DOM操作的API,极大提高了操作DOM节 ...
- Java - Test - TestNG: testng.xml 简介
1. 概述 简介 testng.xml 中的格式, 元素 2. 背景 testng.xml 概述 测试套件 的配置文件 问题 一下生成了那么多内容 我有点看不懂 一上来就看不懂, 其实很正常, 慢慢说 ...