问题描述
此EmptyStackException继续弹出。我无法找到此代码中发生的问题。每次都会显示运行时错误“ java.util.EmptyStackException”。我应该添加到输入数组A.例如如果A = {1,2,3},我应该返回{1,4}。输入可以在MSB之前为0,但输出不能为
。public class Solution {
public ArrayList<Integer> plusOne(ArrayList<Integer> A) {
int i,n,flag;
flag=0;
n=A.size();
ArrayList<Integer> result=new ArrayList<>();
Stack<Integer> s=new Stack<>();
if(A.get(n-1)!=9)
{
s.push(A.get(n-1)+1);
for(i=n-2;i>=0;i--)
s.push(A.get(i));
}
else
{
for(i=n-1;i>=0;i--)
{
if(A.get(i)==9)
s.push(0);
else
{s.push(A.get(i)+1);
i--;
break;}
}
for(i=i;i>=0;i--)
{
s.push(A.get(i));
flag=1;
}
if(flag==0&&(i!=-1))
s.push(1);
}
while(true)
{
if(s.peek()==0)
{
s.pop();
}
else
{
break;
}
}
while(true)
{
if(s.isEmpty())
break;
result.add(s.pop());
}
return result;
}
}
解决方法
这是Java的Stack实现中的peek函数的代码。
public synchronized E peek() {
int var1 = this.size();
if (var1 == 0) {
throw new EmptyStackException();
} else {
return this.elementAt(var1 - 1);
}
}
您可以看到,如果堆栈的大小为零,则将引发空堆栈异常。在调用peek方法之前,您需要首先检查大小。您的堆栈可能没有任何元素。这可能是由于您的上述逻辑所致。您可以通过在堆栈上调用isEmpty方法来检查堆栈是否为空。如果不是,则可以调用peek方法,否则它将引发Empty和StackEmpty。
if(!s.isEmpty() && s.peek()==0)
{
s.pop();
}
,
您可以在没有Stack
的情况下进行操作。
static List<Integer> plusOne(List<Integer> list) {
int size = list.size();
List<Integer> result = new ArrayList<>(size + 1);
int carry = 1;
for (int i = size - 1; i >= 0; --i) {
int digit = list.get(i) + carry;
result.add(0,digit % 10);
carry = digit / 10;
}
if (carry > 0)
result.add(0,carry);
return result;
}
和
List<Integer> result = plusOne(List.of(9,9,9));
System.out.println(result);
输出
[1,0]