完全披露这是一个我没有做对的面试问题。这是个问题:
/*
* 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) 将指定元素插入此列表中的指定位置。
计算成本不高吗?
答案 0 :(得分:4)
您可以使用以下内容将0
添加到列表的开头:
// the element to add
// |
// V
input.add(0, 0);
// ^
// |
// the index to add it at
Here是add
方法的重载文档。
答案 1 :(得分:4)
以相反的顺序存储数字,即索引0表示10 ^ 0,索引1表示10 ^ 1,依此类推。例如,1,235将是[5, 3, 2, 1]
。
BigInteger
是您必须使用的。