58. 最后一个单词的长度
1.题目:
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World" 输出:5 解释:最后一个单词是“World”,长度为5。
示例 2:
输入:s = " fly me to the moon " 输出:4 解释:最后一个单词是“moon”,长度为4。
2.思路:
从后向前遍历,两种情况:
字符串最后由部分空格组成,和直接由单词组成
首先去除字符串最后的空格,从后向前统计最后一个单词的长度
3.代码:
public int lengthOfLastWord(String s) {
int res=0;
int length=s.length();
while(s.charAt(length-1)==' '){
length--;
}
if(length==1){
return 1;
}
for(int i=length-1;i>=0;i--){
if(s.charAt(i)==' '){
return res;
}
res++;
}
return res;
}
66. 加一
1.题目:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。
2.思路:
进位问题
3.代码:
public int[] plusOne(int[] digits) {
for(int i=digits.length-1;i>=0;i--){
digits[i]++;
digits[i]=digits[i]%10;
//如果没产生进位,直接返回数组,否则循环整个数组进行进位加1
if(digits[i]!=0){
return digits;
}
}
//如果整个数组都遍历后产生进位 最高位 创建新数组第一位赋值为1,后面初始化为0就ok
digits=new int[digits.length+1];
digits[0]=1;
return digits;
}
public int[] plusOne(int[] digits) {
int carry=1;
int[] res=new int[digits.length+1];
for(int i=digits.length-1;i>=0;i--){
digits[i]=digits[i]+carry;
carry=digits[i]/10;
digits[i]=digits[i]%10;
}
if(carry==1){
res[0]=1;
for(int i=0;i<digits.length;i++){
res[i+1]=digits[i];
}
return res;
}
return digits;
}