将ArrayList元素向右移动

时间:2015-03-25 23:25:20

标签: java arraylist

完全披露这是一个我没有做对的面试问题。这是个问题:

    /*
     * If you have an integer that is too large to be stored as a built-in type
     * like an int or double, you can represent it as an array of single digits.
     * Write a function that will increment such a number by 1. For example, the
     * number 1,235 would be represented as [1, 2, 3, 5] in an array. The
     * function should take the array [1, 2, 3, 5] as input and return the array
     * [1, 2, 3, 6].
     */

我有一个ArrayList,每个元素代表一个基数为10的数字。我想创建一个增加数字的方法,然后输出增加的数字。所以我有这个:

package start;

import java.util.ArrayList;
import static java.lang.System.out;

public class InputArray {

    private ArrayList<Integer> value;

    public InputArray(ArrayList<Integer> value) {
        this.value = value;
    }


    private ArrayList<Integer> returnBigNum() {

        ArrayList<Integer> input = this.value;
//      input.set(0,0) // this won't work

        for (int i = input.size() - 1; i >= 0; i--) {

            Integer temp = input.get(i);

            temp++;

            if (temp.equals(10)) {
                input.set(i, 0);
            } else {
                input.set(i, temp);
                return input;
            }
        }
        return input;
    }

    public static void main(String[] args) {

        InputArray ia1 = new InputArray(new ArrayList<Integer>(){{
            add(3);add(9);add(9);add(9);add(9);
        }});

        InputArray ia2 = new InputArray(new ArrayList<Integer>(){{
            add(9);add(9);add(9);
        }});

        ArrayList<Integer> result1 = ia1.returnBigNum();
        out.println(result1);

        ArrayList<Integer> result2 = ia2.returnBigNum();
        out.println(result2);
    }

}

我遇到的问题是所有9s的输入,如999,9999,999999等。 输入= 999时,我最终得到000。

因此,一个快速的解决方案是在方法开头的零位添加一个元素,然后你有最后的元素来迭代。但问题是,如何将所有元素转移到右边?如果这是太多的计算工作,那么什么是更好的解决方法?

要把事情向右移,这是必要的吗?

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html void add(int index,E element)           将指定元素插入此列表中的指定位置。

计算成本不高吗?

2 个答案:

答案 0 :(得分:4)

您可以使用以下内容将0添加到列表的开头:

//      the element to add
//           |
//           V
input.add(0, 0);
//        ^
//        |
// the index to add it at

Hereadd方法的重载文档。

答案 1 :(得分:4)

以相反的顺序存储数字,即索引0表示10 ^ 0,索引1表示10 ^ 1,依此类推。例如,1,235将是[5, 3, 2, 1]

PS:面试问题是胡说八道。 BigInteger是您必须使用的。