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


















