題目描述
給定一個非負整陣列成的非空陣列,在該數的基礎上加一,回傳一個新的陣列,
要求:1. 最高位數字存放在陣列的首位, 2. 陣列中每個元素只存盤一個數字
注意:1. 除了整數0之外,這個整數不會以0開頭; 2. 不要忘了某一位為9的情況
輸入描述:
一個陣列,以逗號隔開,表示一個非負整數的每一位數
輸出描述:
一個陣列,以逗號隔開,表示加一以后這個數
示例:
輸入
1,2,3
9,9,9
0
輸出
1,2,4,
1,0,0,0,
1,
解答詳情
方法1
思路:使用String字串型別輸入資料,將字串處理調逗號之后轉為整數型別,對整數進行加一操作,最后整數的每一位并輸出,使用到Stack和List,算是暴力解的情況,
public static void plusOne1(String input){
String str = input;
String[] strs = str.split(",");
int len = strs.length;
int sum = 0;
for (int i = 0; i < len-1; i++) {
sum += Integer.parseInt(strs[i]);
sum = sum*10;
}
sum += Integer.parseInt(strs[len-1])+1;
Stack<Integer> stack = new Stack<>();
int temp = 0;
while(sum!=0){
temp = sum%10;
sum = sum/10;
stack.push(temp);
}
List list = new ArrayList<>();
while (!stack.isEmpty()){
list.add(stack.pop());
list.add(",");
}
for (Object o : list){
System.out.print(o);
}
}
方法二
思路:同樣是使用String型別作為輸入型別,對逗號進行操作后,將每一位數字賦值給int型別陣列,由后往前遍歷并進行余10判斷,
public static void plusOne2(String input){
String str = input;
String[] strs = str.split(",");
int len = strs.length;
int[] nums = new int[len];
for (int i = 0; i < len; i++) {
nums[i] = Integer.parseInt(strs[i]);
}
int index = len-1;
for(int i = len-1 ; i >=0 ; i--){
nums[i]++;
nums[i] = nums[i]%10;
index = i;
if (nums[i]!=0){
break;
}
}
if(index==0){
nums = new int[len+1];
nums[0] = 1;
}
for(Integer num : nums){
System.out.print(num+",");
}
}
注:該題和Leetcode:66題相似
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296195.html
標籤:其他
