头像

z林深时见鹿

中北大学




离线:7小时前


最近来访(338)
用户头像
小徐
用户头像
星星_8
用户头像
爱吃计划的见学习徒丶猪猪sov
用户头像
福尔摩东
用户头像
CyderX
用户头像
1654776327
用户头像
zhuzuojun
用户头像
ALS
用户头像
zhihaoFu
用户头像
柒月栗子
用户头像
Oli
用户头像
小陈同学.
用户头像
蜗牛也有蓝天
用户头像
lsp_同学
用户头像
蔚蓝_6
用户头像
nowornever_7
用户头像
陈情
用户头像
wehiders
用户头像
Destiny._0
用户头像
Charon


class Solution {
public:
    /**
    通过与运算与异或运算来实现加法运算
       1、计算两个数不算进位的结果 (a^b)
       2、计算两个数进位的结果 (a&b)<<1
       3、将两个结果相加.我们发现又要用到加法运算,那么其实我们重复上述步骤就行了,直到一个数变 为0(不再进位)运算全部完成
    **/
    int add(int a, int b) {
        while(b){
            int x = a^b;
            int y = (unsigned int)(a&b)<<1;
            a = x;
            b = y;
        }
        return a;
    }
};



活动打卡代码 LeetCode 264. 丑数 II

class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int> res;
        res.push_back(1);
        int i = 0, k = 0, j = 0;
        while(--n){
            int t = min(res[i] * 2, min(res[j] * 3, res[k] * 5));
            res.push_back(t);
            if(t % 2 == 0)  i++;
            if(t % 3 == 0)  j++;
            if(t % 5 == 0)  k++;
        }
        return res.back();
    }
};



活动打卡代码 LeetCode 400. 第N个数字

class Solution {
public:
    int findNthDigit(int n) {
        //n++ 从第1位开始计数
        //n-- 先把0去掉,一位数字变成了9个
        // i枚举的是位数,从1位开始枚举
        // s表示这一位一共有多少个数,1位有9个数
        // base表示这一位的第一个数是多少,1位的第一个数是1,2位的第一个数是10,3位是100,4位是1000
        long long i = 1,s = 9, base = 1; 
        while( n > i*s )
        {
            n -= i * s;
            i++;
            s *= 10;
            base *= 10;               
        }
        //确定i位数的第n位是属于哪个数  [n/i]上取整 = [(n+i-1)/i] 
        int number = base + (n + i - 1)/i - 1;
        //确定那个数的第几位
        int r = n % i ? n % i : i;  // 除不尽就是第几位,除尽了就是最后一位

        for(int j = 0; j < i - r; j++) number /= 10;

        return number % 10;
    }
};



/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummy = new ListNode(-1); //虚拟头节点
        dummy->next = head;
        ListNode* p = dummy;
        while(p && p->next){
            if(p->next->val == val) p->next = p->next->next;
            else p = p->next;
        }
        return dummy->next;
    }
};


活动打卡代码 LeetCode 119. 杨辉三角 II

class Solution {
public:
    // 状态转移方程:f[i][j] = f[i - 1][j] + f[i - 1][j - 1]
    vector<int> getRow(int n) {
        vector<vector<int>> f(n + 1);
        for(int i = 0; i <= n; i++){  //第i行,有i+1个元素
            f[i].resize(i + 1);
            f[i][0] = f[i][i] = 1;    //每行的开头和结尾元素为1
            for(int j = 1; j < i; j++)
                f[i][j] = f[i - 1][j] + f[i - 1][j - 1];  //中间元素
        }
        return f[n];
    }
};


活动打卡代码 LeetCode 67. 二进制求和

class Solution {
public:
    string addBinary(string a, string b) {
        int n = a.size(), m = b.size();
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());
        string res;
        int t = 0;
        for(int i = 0; i < max(n, m); i++){
            if(i < n) t += a[i] - '0';
            if(i < m) t += b[i] - '0';
            res += to_string(t % 2);
            t /= 2;
        }
        if(t) res += to_string(t);
        reverse(res.begin(), res.end());
        return res;
    }
};



class Solution {
public:
    int lengthOfLastWord(string s) {
        int j = s.size() - 1;
        while(j >= 0 && s[j] == ' ') j--;  //跳过结尾空格
        int i = j;
        while(i >= 0 && s[i] != ' ') i--;  //跳过最后一个单词
        return j - i; // [i + 1, j]即为结尾单词
    }
};


活动打卡代码 LeetCode 35. 搜索插入位置

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int l = 0, r = nums.size() - 1;
        while(l < r){
            int mid = l + r >> 1;
            if(nums[mid] >= target) r = mid;
            else l = mid + 1;
        }
        if(nums[r] < target) return r + 1;
        return l;
    }
};


活动打卡代码 LeetCode 27. 移除元素

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int k = 0;
        for(int x : nums){
            if(x != val) nums[k++] = x;
        }
        return k;
    }
};


活动打卡代码 LeetCode 27. 移除元素

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int k = 0;
        for(int x : nums){
            if(x != val) nums[k++] = x;
        }
        return k;
    }
};