LeeCode66.加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
解法一:注意[0] [9] [9,9]特殊输入。
class Solution {
public int[] plusOne(int[] digits) {
int num; //定义一个int变量
if(digits.length>1){//判断数组的长度
for(int i=digits.length-1;i>=0;i--){//从数组中最后一个值开始
num=(digits[i]+1)%10; //余数
if(num==0){ //判断是否余数为0
digits[i]=0; //余数为零直接令该角标对应值为0
}
else{
digits[i]=num; //不为0则可以直接跳出判断
break; //跳出当前
}
if(digits[0]==0){ //如果角标第一个的值,为0
digits=new int[digits.length+1];//扩容1
digits[0]=1; //第一个角标值为1
}
}
}else{
if(digits[0]==9){ //判断长度为1的数组,第一个数字为9
digits=new int[]{1,0}; //直接打印数组1,0
}else{
digits[0]++; //如果长度为1的数组,第一个数字不是9,则值+1
}
}
return digits; //将digits返回
}
}
解法二:
class Solution {
public int[] plusOne(int[] digits) {
for(int i=digits.length-1;i>=0;i--){ //i取值为digits.length~0
if(digits[i]!=9){ //判断最后一个角标的数组值是否为9
digits[i]++; //不是直接+1
return digits; //将结果返回
}
digits[i]=0; //如果最后一个角标的数组值为9,则赋0
}
int[] newDigits=new int[digits.length+1]; //对原数组扩容1
newDigits[0]=1; //令第一个数为1
return newDigits; //将结果返回
}
}
LeeCode136.只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
解法:
class Solution {
public int singleNumber(int[] nums) {
int num=0; //定义num的初值为0
for(int i=0;i<nums.length;i++){ //i从0~nums.length
int count=1; //定义出现次数初值为1
for(int j=0;j<nums.length;j++){//j从0~nums.length
if(i!=j){ //不能和本身比较
if(nums[i]==nums[j]){ //如果出现相同数字
count++; //次数+1
break; //跳出当前
}
}
}
if(count==1){ //如果没有出现数字,则次数还是1
num=nums[i]; //将该值赋给num
}
}
return num; //将num返回输出
}
}
LeeCode724.寻找数字的中心索引
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
示例 1:
输入:
nums = [1, 7, 3, 6, 5, 6]
输出: 3
解释:
索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。
同时, 3 也是第一个符合要求的中心索引。
示例 2:
输入:
nums = [1, 2, 3]
输出: -1
解释:
数组中不存在满足此条件的中心索引。
说明:
nums 的长度范围为 [0, 10000]。
任何一个 nums[i] 将会是一个范围在 [-1000, 1000]的整数。
解法: