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