58、最后一个单词的长度
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
class Solution {
public int lengthOfLastWord(String s) {
int length=0;//计算最后一个单词的长度
for(int i=s.length()-1;i>=0;i--){
if(s.charAt(i)!=' '){
length++;
}else if (s.charAt(i)==' '& length!=0){//判断如果是空格,并且length=0(lenght=0表明还没有出现一个完整的单词)
return length;
}
}
return length;
}
}
split做的思路是:利用split获取到字符串的每一个单词,之后输出ss的最后一个字符串并获取到长度。
String s = "Hello World";
String [] ss = s.split(" ");//双引号之间有空格
66、加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
示例4:
输入:digits=【9,9】
输出:【1,0,0】
意思是把数组转化为一个整数,并在整数上+1,最后输出每一个数字
法一:
class Solution {
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] != 9) {//从数组的最后判断是不是等于9
digits[i]++;
return digits;
}else{
digits[i] = 0;//如果该数字是9的话,(9+1=10) 直接赋值为0【示例4】
}
}
//跳出for循环,能进行以下代码,说明数组里的数全部是9
int[] arr = new int[digits.length + 1];
arr[0] = 1;
return arr;
}
}
法二:思路可以,但是整型溢出了。因为int的取值范围是 -2^31(-2147483648) ~ 2^31-1(2147483647),这时候如果数组是【9,8,7,6,5,4,3,2,1,0】就超出int的范围了。
//法二:将数组转成一个数字,并输出每一个数字 不可行!!!
class Solution {
public int[] plusOne(int[] digits) {
int sum=0;
//将数组转成数字
for(int j=0;j<digits.length;j++){
sum=sum*10+digits[j];
}
sum+=1;
String s=String.valueOf(sum);
int []arr=new int[s.length()];
for(int i=0;i<s.length();i++){
arr[i]=Integer.parseInt(String.valueOf(s.charAt(i)));
//将字符转成字符串,再转成整型
}
return arr;
}
}
由于67的解题思路学习了BinInteger
故法三在法二的基础上改进
import java.math.BigInteger;
class Solution {
public int[] plusOne(int[] digits) {
BigInteger sum=new BigInteger("0");
BigInteger ten=new BigInteger("10");
BigInteger one=new BigInteger("1");
//利用BigInteger的类型,将数组转成一个数(只不过这个数是BigInteger类型的)
for(int j=0;j<digits.length;j++){
sum=sum.multiply(ten).add(BigInteger.valueOf(digits[j]));
}
sum=sum.add(one);
String s=String.valueOf(sum);
int []arr=new int[s.length()];
for(int i=0;i<s.length();i++){
arr[i]=Integer.parseInt(String.valueOf(s.charAt(i)));
//将字符转成字符串,再转成整型
}
return arr;
}
}
67、二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1
和 0
。
思路一:将二进制转成十进制,十进制相加后再转成二进制。——————不可行!!!
二进制字符串没有范围,但是int有范围。
class Solution {
public String addBinary(String a, String b) {
int c=Integer.parseInt(a,2);//二进制a转成十进制并赋给c
int d=Integer.parseInt(b,2);
int e=c+d;
String s=Integer.toBinaryString(e);//十进制数e转成二进制并赋给s
return s;
}
}
法二:将int变成BigInteger就行啦
import java.math.BigInteger;
class Solution {
public String addBinary(String a, String b) {
BigInteger num1=new BigInteger(a,2);//将二进制的a转成BigInteger类型的num1。
BigInteger num2=new BigInteger(b,2);
String s=num1.add(num2).toString(2);//BigInteger里的toString和平常的toString不一样
return s;
}
}
BigInteger num1=new BigInteger(a,2); 表示:将二进制的a转成BigInteger类型的num。
BigInteger num=new BigInteger(a); 表示:我们通常不写则是默认成10进制转换