✅ 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的更多相关文章

  1. leetcode 0211

    目录 ✅ 1217. 玩筹码 描述 解答 c java py ✅ 206. 反转链表 描述 解答 c java py ✅ 922. 按奇偶排序数组 II 描述 解答 c 双指针soldier tddo ...

  2. 【LeetCode】LCP 07. 传递信息

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS 日期 题目地址:https://leetcod ...

  3. 我为什么要写LeetCode的博客?

    # 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...

  4. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  5. [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 ...

  6. 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 ...

  7. Leetcode 笔记 112 - Path Sum

    题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...

  8. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  9. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

随机推荐

  1. Oracle使用记录

    1.连接数据库的方式 sqlplus system/system@127.0.0.1:1521/orcl #远程用户名密码连接 sqlplus dbsnmp/oracle; #本地用户名密码连接 sq ...

  2. vue 无法热替换/热更新

    参考了小伙伴的解决办法: 1.https://blog.csdn.net/win7583362/article/details/65443291 虽然我并不是用对方的方法解决的. 依然还是建议大家打开 ...

  3. 【转载】Java中的容器讲解

    转自:http://blog.csdn.net/garfielder007/article/details/52143794 Set,List,Map,Vector,ArrayList的区别 Java ...

  4. docker容器 - 新建容器、启动容器、暂停容器和停止容器

    实验环境 CentOS 7.5 容器 容器是镜像的运行实例.不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层:同时,容器中的应用进程处于运行状态. 新建容器 [root@kvm ~]# ...

  5. RegExp-dotAll

    //.不能匹配四个字节的utf16字符和行终止符\n,\r console.log(/foo.bar/.test('foo\nbar')) //false //dotAll console.log(/ ...

  6. Vue - 过渡 列表过渡

    列表的进入/离开过渡 获取不大于数组长度的随机数,作为插入新值的位置 <div id="app" class="demo"> <button ...

  7. 版本控制gitlab

    目录 1. 版本控制介绍 2. gitlab部署 3. gitlab管理 1. 版本控制介绍 版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一 ...

  8. Educational Codeforces Round 78 (Rated for Div. 2)E(构造,DFS)

    DFS,把和当前结点相连的点全都括在当前结点左右区间里,它们的左端点依次++,然后对这些结点进行DFS,优先对左端点更大的进行DFS,这样它右端点会先括起来,和它同层的结点(后DFS的那些)的区间会把 ...

  9. zookeeper集群搭建记录

    本文仅记录zookeeper集群搭建的过程,留待日后查看.使用. 一.硬件机器: 192.168.183.195 master-node 192.168.183.194 data-node1 192. ...

  10. Google 开源的依赖注入库,比 Spring 更小更快!

    Google开源的一个依赖注入类库Guice,相比于Spring IoC来说更小更快.Elasticsearch大量使用了Guice,本文简单的介绍下Guice的基本概念和使用方式. 学习目标 概述: ...