目录
1. 2 的幂 🌟
2. 打印年历 🌟
3. 二叉树的右视图 🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
给你一个整数 n
,请你判断该整数是否是 2 的幂次方。如果是,返回 true
;否则,返回 false
。
如果存在一个整数 x
使得 n == 2^x
,则认为 n
是 2 的幂次方。
示例 1:
输入:n = 1 输出:true 解释:2^0 = 1
示例 2:
输入:n = 16 输出:true 解释:2^4 = 16
示例 3:
输入:n = 3 输出:false
示例 4:
输入:n = 4 输出:true
示例 5:
输入:n = 5 输出:false
提示:
-2^31 <= n <= 2^31 - 1
进阶:你能够不使用循环/递归解决此问题吗?
代码:
#include
using namespace std;class Solution{
public:bool isPowerOfTwo(int n){if (n < 1) return false;while (n%2 == 0) n /= 2;return n == 1;}void PowerOfTwo(int n){cout << (isPowerOfTwo(n) ? "true" : "false") << endl;}
};int main()
{Solution s;s.PowerOfTwo(1);s.PowerOfTwo(16);s.PowerOfTwo(3);s.PowerOfTwo(4);s.PowerOfTwo(5);return 0;
}
输出:
true
true
false
true
false
递归法:
#include
using namespace std;class Solution{
public:bool isPowerOfTwo(int n){if (n < 1) return false;else if (n == 1) return true;else return n % 2 == 0 && isPowerOfTwo(n / 2);}void PowerOfTwo(int n){cout << (isPowerOfTwo(n) ? "true" : "false") << endl;}
};int main()
{Solution s;s.PowerOfTwo(1);s.PowerOfTwo(16);s.PowerOfTwo(3);s.PowerOfTwo(4);s.PowerOfTwo(5);return 0;
}
进阶: 位运算,可以不使用循环/递归
2^n满足条件: n & (n - 1) == 0
#include
using namespace std;class Solution{
public:bool isPowerOfTwo(int n){return n > 0 && (n & (n - 1)) == 0;}void PowerOfTwo(int n){cout << (isPowerOfTwo(n) ? "true" : "false") << endl;}
};int main()
{Solution s;s.PowerOfTwo(1);s.PowerOfTwo(16);s.PowerOfTwo(3);s.PowerOfTwo(4);s.PowerOfTwo(5);return 0;
}
要求:模仿现实生活中的挂历。 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。 当系统日期变到下一月时,系统自动翻页到下一月。
代码:
#include
int year(int y)
{if ((y%4==0) && (y%100!=0) || y%400==0)return 366;elsereturn 365;
}
int main()
{int y;int i,j,sum=0; int begin,week;int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};scanf("%d",&y);for(i=1;i
输出:
2023
2023年日历如下:
1月
7 1 2 3 4 5 6
=====================
1 2 3 4 5 6
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
2月
7 1 2 3 4 5 6
=====================
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28
3月
7 1 2 3 4 5 6
=====================
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
4月
7 1 2 3 4 5 6
=====================
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
5月
7 1 2 3 4 5 6
=====================
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
6月
7 1 2 3 4 5 6
=====================
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
7月
7 1 2 3 4 5 6
=====================
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
8月
7 1 2 3 4 5 6
=====================
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
9月
7 1 2 3 4 5 6
=====================
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
10月
7 1 2 3 4 5 6
=====================
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
11月
7 1 2 3 4 5 6
=====================
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
12月
7 1 2 3 4 5 6
=====================
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4] 输出: [1,3,4]
示例 2:
输入: [1,null,3] 输出: [1,3]
示例 3:
输入: [] 输出: []
提示:
[0,100]
-100 <= Node.val <= 100
代码:
#include
#include
#include
#include
#define null INT_MIN
using namespace std;struct TreeNode
{int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};TreeNode* buildTree(vector& nums)
{if (nums.empty()) return nullptr;TreeNode *root = new TreeNode(nums.front());queue q;q.push(root);size_t i = 1;while(!q.empty() && i < nums.size()){TreeNode *cur = q.front();q.pop();if(i < nums.size() && nums[i] != null){cur->left = new TreeNode(nums[i]);q.push(cur->left);}i++;if(i < nums.size() && nums[i] != null){cur->right = new TreeNode(nums[i]);q.push(cur->right);}i++;}return root;
}string vectorToString(vector vect) {stringstream ss;ss << "[";for (size_t i = 0; i < vect.size(); i++){ss << (vect[i] == null ? "null" : to_string(vect[i]));ss << (i < vect.size() - 1 ? ", " : "]");}return ss.str();
}class Solution
{
public:vector rightSideView(TreeNode *root){vector ret;queue queues[2];if (root)queues[0].push(root);int i = 0, j = 1, tmp;TreeNode *p;while (!queues[0].empty() || !queues[1].empty()){while (!queues[i].empty()){p = queues[i].front();queues[i].pop();if (p->left)queues[j].push(p->left);if (p->right)queues[j].push(p->right);tmp = p->val;}ret.push_back(tmp);i = (i + 1) % 2;j = (j + 1) % 2;}return ret;}
};int main()
{Solution s;vector nums = {1,2,3,null,5,null,4};TreeNode* root = buildTree(nums);vector inorder = s.rightSideView(root);cout << vectorToString(inorder) << endl;return 0;
}/* 附:二叉树中序遍历
#include
vector inorderTraversal(TreeNode* root) {vector res;stack nodes;TreeNode* p = root;while (p != NULL || !nodes.empty()) {if (p != NULL) {nodes.push(p);p = p->left;} else {p = nodes.top();nodes.pop();res.push_back(p->val);p = p->right;}}return res;
}
*/
输出:
[1, 3, 4]
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
![]() | Golang每日一练 专栏 |
![]() | Python每日一练 专栏 |
![]() | C/C++每日一练 专栏 |
![]() | Java每日一练 专栏 |