1.添加逗号
思路:
没思路
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;int main() {string a;cin >> a;string ans;int p = 1;for (int i = a.size() - 1; i >= 0; i--) {ans += a[i];if (p % 3 == 0 && i != 0)ans += ',';p++;}reverse(ans.begin(), ans.end());cout << ans;
}
// 64 位输出请用 printf("%lld")
2.跳台阶
思路:
题目要求空间复杂度o1,那就用两个变量迭代斐波那契数列就行。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;int main() {int n;cin >> n;if (n == 1) {cout << 1 << endl;return 0;}if (n == 2) {cout << 2 << endl;return 0;}long long a = 1, b = 2;long long c;for (int i = 3; i <= n; i++) {c = a + b;a = b;b = c;}cout << c << endl;
}
3.扑克牌顺子
思路:
直接思考On做法.On做法不难,主要是还有空间复杂度为O1。这就意味着什么mp,数组统统错误。
回归问题本质,数子0是癞子,不用考虑。用两个变量维护最大值和最小值就行了。中间该如何判断有没有重复元素呢?考虑用一个位图表示。第i位为1,表示i这个数子出现了一次。
如果第i位为1了的情况下,又遇到了i.那就说明重复了直接false
最后判断最大值和最小值的差值。如果差值大于4,不用考虑直接滚。小于4,且没有除了0以外的重复元素,那就一定是可以组成顺子。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
class Solution {
public:bool IsContinuous(vector<int>& numbers) {int mx = 0;int mi = 1e9;int s = 0;for (int i = 0; i < numbers.size(); i++) {if (numbers[i] == 0) {continue;}mx = max(mx, numbers[i]);mi = min(mi, numbers[i]);if ((s >> numbers[i]) & 1) {return false;}else {s |= (1 << numbers[i]);}}if (mx - mi > 4) {return false;}return true;}
};