ArrayList删除第一个元素

时间:2015-05-13 04:09:19

标签: java

这是给定的问题: 给定一个非负数表示为数字数组,

将数字加1(增加数字所代表的数字)。

存储数字,使最高位数位于列表的开头。

示例:

如果载体有[1,2,3]

返回的矢量应为[1,2,4]

为123 + 1 = 124。

这是我的代码:

 public class Solution {
    public ArrayList<Integer> plusOne(ArrayList<Integer> A) {       
        int carry = 1;
        int length = A.size();
        ArrayList result = new ArrayList();

        for( int i = length - 1; i >=0; i-- ){
            int val = A.get(i) + carry;
            result.add(0,val % 10);
            carry = val / 10;
        }

        if (carry == 1){
            result.add(0,1);
        }

        for (int j = 0; j < result.size(); j++){
            if(result.get(j).equals(0))
                result.remove(j);
            else
                break;
       }

        return result;

    }
  }

但是,在测试用例中: 答:[0,6,0,6,4,8,8,1]

它说我的函数返回

6 6 4 8 8 2

正确的答案是

6 0 6 4 8 8 2

我不知道我的代码有什么问题。

谢谢!

3 个答案:

答案 0 :(得分:8)

if(result.get(j).equals(0))
    result.remove(j);
else
    break;

如果每个其他索引都包含0,则会失败。这里会发生什么:

0 6 0 6 4 8 8 2
^ (j = 0)

0将被删除,j将增加1。

6 0 6 4 8 8 2
  ^ (j = 1)

然后删除此0,跳过数组中的前6个。要解决此问题,请将代码段更改为:

if(result.get(j).equals(0))
    result.remove(j--);
else
    break;

这可以补偿何时删除索引,以便j在删除任何0后不会立即跳过该数字。

答案 1 :(得分:1)

tcp proxy module

查看类似的问题

更简单的做法

while (!result.isEmpty() && result.get(0).equals(0)) {
  result.remove(0);
}

这将继续删除最左边的0,直到没有最多的零被删除。

答案 2 :(得分:1)

您的上一次for循环正在从结果0中删除ArrayList<Integer>。删除该循环后,您将获得完美的输出

public static ArrayList<Integer> plusOne(ArrayList<Integer> A) {       
    int carry = 1;
    int length = A.size();
    ArrayList result = new ArrayList();

    for (int i = length - 1; i >= 0; i--) {
        int val = A.get(i) + carry; //2 8
        result.add(0, val % 10);    // 2 8
        carry = val / 10;  
    }

    if (carry == 1) {
        result.add(0, 1);
    }

//  for (int j = 0; j < result.size(); j++) {
//      if (result.get(j).equals(0))
//          result.remove(j);
//      else
//          break;
//  }

    for (boolean isZero = true; isZero; ) {
        isZero = result.get(0).equals(0);

        if(isZero)
            result.remove(0);
    }

    return result;
}