66. Plus One (类型转换,int[], String
2018-07-12 本文已影响0人
萧瑟空间
大致需求的输入输出为:
程序需求
我的偷懒转换类型版为:
class Solution {
public int[] plusOne(int[] digits) {
String int_str = "";
for(int item: digits){
int_str += String.valueOf(item);
//将每一个数字转化成String
}
int num = Integer.valueOf(int_str).intValue();
//再将最后转化成的String转成int
int_str = String.valueOf(num+1);
//最终数+1后转回String
char[] int_char = int_str.toCharArray();
//String变成char数组
int[] result = new int[int_char.length];
for(int i = 0; i < int_char.length; i++){
result[i] = int_char[i] - '0';
//将char数组转回int数组,每一个单独的char转成int为 - '0'
}
return result;
}
}
但是实际上这个做法是没法通过的,因为给的初始数可能超过int值的最大值。
Integer.MAX_VALUE = 2147483647
Integer.MIN_VALUE = -2147483648
但是却很好地练习了各种类型转换。
直接用数组来操作的解法有:
class Solution {
public int[] plusOne(int[] digits) {
Boolean flag = false;
int length = digits.length;
int p = length-1;
do{
if(p>=0){
flag = helper(p, digits);
//数组是一个object,把遥控器的值传过去了还是能修改到数组本身,所以最后数组值变了
p -= 1;
}
else{
int answer[] = new int[length+1];
answer[0] = 1;
return answer;
}
}while(!flag);
return digits;
}
public boolean helper(int p, int[] ori){
if(ori[p] == 9){
ori[p] = 0;
return false;
}
else{
ori[p] += 1;
return true;
}
}
}
这是答案里最简洁的一个Java solution
public int[] plusOne(int[] digits) {
int n = digits.length;
for(int i=n-1; i>=0; i--) {
if(digits[i] < 9) {
digits[i]++;
return digits;
}
digits[i] = 0;
}
int[] newNumber = new int [n+1];
newNumber[0] = 1;
return newNumber;
}
大概只有我代码的一半长度。其实底层的逻辑是一模一样的,但是它并没有像我一样把“给某一位+1”的逻辑单独挑出来做成一个函数。答案的代码逻辑更清晰,用一个for循环内部直接return的方式来替代了我的do while循环。