LeetCode 实践练习66-70

LeetCode—66(加一)

在这里插入图片描述
方法:每次都判断是否为9,具体看代码。
C++代码:

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int n = digits.size();
        if(digits[n-1] != 9) {digits[n-1] += 1;return digits;}
        else{
            digits[n-1] = 0; 
            for(int i = 1;i < n;i++){
                 if(digits[n-i-1] != 9) {digits[n-i-1] += 1;return digits;}
                 digits[n-i-1] = 0;
            }
        }
        digits.insert(digits.begin(),1);
        return digits;
    }
};

LeetCode—67(二进制求和)

在这里插入图片描述
C++代码:

class Solution {
public:
    string addBinary(string a, string b) {
        string res = "";
        int m = a.size() - 1, n = b.size() - 1, carry = 0;
        while (m >= 0 || n >= 0) {
            int p = m >= 0 ? a[m--] - '0' : 0;
            int q = n >= 0 ? b[n--] - '0' : 0;
            int sum = p + q + carry;
            res = to_string(sum % 2) + res;
            carry = sum / 2;
        }
        return carry == 1 ? "1" + res : res;
    }
};

LeetCode—68(文本左右对齐)

在这里插入图片描述
方法:
1.首先我们需要判断每行可以放下的单词数,比较n个单词的长度加上 n-1个空格的长度与给定的maxWidth比较即可。
2.找到了一行可以容下单词的个数,接下来找到空格的个数,用maxWidth减去单词和总长度。
3.找到了空格的个数,就要在单词后面插入这些空格。这是如果是最后一行,那就是to a ;若不是就to a;正常情况。
4.若空格数不能平均分配那就,左边空间比右边空间多放。
C++代码:

class Solution {
public:
    vector<string> fullJustify(vector<string> &words, int L) {
        vector<string> res;
        int i = 0;
        while (i < words.size()) {
            int j = i, len = 0;
            while (j < words.size() && len + words[j].size() + j - i <= L) {
                len += words[j++].size();
            }
            string out;
            int space = L - len;
            for (int k = i; k < j; ++k) {
                out += words[k];
                if (space > 0) {
                    int tmp;
                    if (j == words.size()) { 
                        if (j - k == 1) tmp = space;
                        else tmp = 1;
                    } else {
                        if (j - k - 1 > 0) {
                            if (space % (j - k - 1) == 0) tmp = space / (j - k - 1);
                            else tmp = space / (j - k - 1) + 1;
                        } else tmp = space;
                    }
                    out.append(tmp, ' ');
                    space -= tmp;
                }
            }
            res.push_back(out);
            i = j;
        }
        return res;
    }
};

LeetCode—69(x的平方根)

在这里插入图片描述
方法:利用二分法来进行查找,需要理解left,right,mid 的位置。而且最好不要用用i * i的方法来做,因为 i * i极有可能超出int范围。
C++代码:

class Solution {
public:
    int mySqrt(int x) {
        if(x <= 1) return x;
        int left = 0,right = x;
        while(left < right){
            int mid = left + (right - left)/2;
            if(x/mid >= mid) left = mid + 1;
            else right = mid;
        }
        return right - 1;
    }
};

LeetCode—70(爬楼梯)

在这里插入图片描述
方法:这道题类似于斐波那契数列,还有就是还可以扩展,每一次可以跳n阶。
C++代码:

class Solution {
public:
    int climbStairs(int n) {
        //考虑特殊情况
        int result[2] = {0,1};
        if(n < 2) return result[n];
        long long fibNMinusOne = 1;
        long long fibNMinusTwo = 1;
        long long fibN = 0;
        for(int i = 2;i <= n;i++){
            fibN = fibNMinusOne + fibNMinusTwo;
            fibNMinusTwo = fibNMinusOne;
            fibNMinusOne = fibN;
        }
        return fibN;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值