58.最后一个单词的长度
从右向左遍历,从第一个不是空格的字符开始计数,一旦开始计数,再遇到空格就结束了
class Solution {
public int lengthOfLastWord(String s) {
if(s == null || s.length() == 0) return 0;
int count = 0;
for(int i = s.length()-1; i >= 0; i--){
if(s.charAt(i) == ' '){
if(count == 0) continue;
break;
}
count++;
}
return count;
}
}
66.加一
java
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] == 9) {
digits[i] = 0;
} else {
digits[i] += 1;
return digits;
}
}
//如果所有位都是进位,则长度+1
digits= new int[digits.length + 1];
digits[0] = 1;
return digits;
}
c++
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len=digits.size()-1;
for(int i=len;i>=0;i--){
if(digits[i]==9){
digits[i]=0;
}else{
digits[i]+=1;
return digits;
}
}
vector<int>ans(len+2);
ans[0]=1;
return ans;}
};
67.二进制求和
自带函数快速解法:
c++
#include<cstring>
class Solution {
public:
string addBinary(string a, string b) {
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;
string builder;
//循环相加两个字符串相同长度的低位数部分
while (i >= 0 && j >= 0) {
int sum = carry;
std::cout<<"a---"<<a.at(i)-'0'<<std::endl;
std::cout<<"b---"<<b.at(j)-'0'<<std::endl;
sum += a.at(i--) - '0';
sum += b.at(j--) - '0';
carry = sum / 2; //是否进位
builder+=to_string((sum % 2));
}
// 如果 a 还没遍历完成(a串比b串长),则继续遍历添加 a 的剩余部分
while (i >= 0) {
int sum = carry + a.at(i--) - '0';
carry = sum / 2;
builder+=to_string(sum % 2);
}
// 如果 b 还没遍历完成(b串比a串长),则继续遍历添加 b 的剩余部分
while (j >= 0) {
int sum = carry + b.at(j--) - '0';
carry = sum / 2;
builder+=to_string(sum % 2);
}
//如果 carry 不等于0 还有个进位数没加进去,需要补充
if (carry == 1) {
builder+=to_string(carry);
}
//反转字符串获得正常结果
reverse(builder.begin(),builder.end());
return builder;
}
};
java:
class Solution {
public String addBinary(String a, String b) {
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;
StringBuilder builder = new StringBuilder();
//循环相加两个字符串相同长度的低位数部分
while (i >= 0 && j >= 0) {
int sum = carry;
sum += a.charAt(i--) - '0';
sum += b.charAt(j--) - '0';
carry = sum / 2;
builder.append(sum % 2);
}
// 如果 a 还没遍历完成(a串比b串长),则继续遍历添加 a 的剩余部分
while (i >= 0) {
int sum = carry + a.charAt(i--) - '0';
carry = sum / 2;
builder.append(sum % 2);
}
// 如果 b 还没遍历完成(b串比a串长),则继续遍历添加 b 的剩余部分
while (j >= 0) {
int sum = carry + b.charAt(j--) - '0';
carry = sum / 2;
builder.append(sum % 2);
}
//如果 carry 不等于0 还有个进位数没加进去,需要补充
if (carry == 1) {
builder.append(carry);
}
//反转字符串获得正常结果
return builder.reverse().toString();
}