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;
}
};