华为OD笔试202010OD笔试华为OD第三题入栈操作
华为OD笔试202010OD笔试华为OD第三题入栈操作
输入 5 10 20 50 85 1 输出 1 170 输入 6 7 8 13 9 输出 9 13 8 7 6
解释
输入入栈 6 1 2 3 5 按顺序入栈 6 1 2 3 = 2 + 1 然后把 2 1 出栈,再把2*3=6入栈,此时 6=6 把6 6 出栈,再把2*6=12入栈, 5 输出: 5 12
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int len = 0;
String[] split = sc.nextLine().split(" ");
int[] nums = new int[split.length];
for (int i = 0; i < split.length; i++) {
int num = Integer.parseInt(split[i]);
nums[len] = num;
len = pushStack(nums, len);
}
for (int i = len - 1; i >= 0; i--) {
System.out.print(nums[i] + " ");
}
}
private static int pushStack(int[] nums, int len) {
int tmpNum = nums[len];
int tmpLen = len - 1;
while (tmpNum > 0 && tmpLen >= 0) {
tmpNum = tmpNum - nums[tmpLen];
if (0 == tmpNum) {
// 2*num
nums[tmpLen] = 2 * nums[len];
len = tmpLen;
int i = pushStack(nums, len);
return i;
}
tmpLen--;
}
len++;
return len;
}
}
