我最好用一个例子来表达这一点,我正在尝试编写一个程序,假设我有一个这样的函数:
static List<Integer> int2List(int l, int base)
输入和输出应该是
l=0, base=3, return {1}
l=1, base=3, return {2}
l=2, base=3, return {3}
l=3, base=3, return {1,1}
l=4, base=3, return {1,2}
l=5, base=3, return {1,3}
l=6, base=3, return {2,1}
l=7, base=3, return {2,2}
l=8, base=3, return {2,3}
l=9, base=3, return {3,1}
l=10, base=3, return {3,2}
l=11, base=3, return {3,3}
l=12, base=3, return {1,1,1}
l=13, base=3, return {1,1,2}
l=14, base=3, return {1,1,3}
...这很像递归模式,但有些条件我无法弄清楚。
谢谢
感谢您的所有评论,我已经更新了问题内容和方法的签名,我想显示列表的内容,但我忘了在元素之间添加逗号。
所以这是我的代码,它还不正确,但我认为你可以从中有所了解。它也很像 Long.toString(int i, int radix),不同之处在于首先我需要添加那些前导零,其次我需要对列表中的每个元素执行“+1”,但这样做不是给我正确的...
static List<Integer> int2List(int l, int base) {
// String s = Long.toString(l,base);
List<Integer> list = new ArrayList<Integer>();
int k = l % base;
int j = l / base;
int m = 0;
list.add((int) (k + 1));
while (j > base) {
k = j % base;
list.add((int) (k));
if (j == base)
break;
j = j / base;
}
if (j == base) {
list.add((int) (j));
} else {
if (j > 0) {
list.add((int) (j));
}
}
Collections.reverse(list);
return list;
}
我知道我在第一个版本中犯的错误,我现在更正我的错误并将问题更新为更具体,请您删除“不值得阅读”,我将非常感激..
====================
嗯,这个方法应该是在循环中使用的,这样它就会输出范围[1,base]内的数字组成的所有可能的序列,并且l
可以看作是一个索引。