-2

我最好用一个例子来表达这一点,我正在尝试编写一个程序,假设我有一个这样的函数:

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可以看作是一个索引。

4

2 回答 2

2

这个怎么样?

static List<Integer> int2List(int l, int base)
{
    List<Integer> list = new ArrayList<Integer>();
    int n;
    l++;
    while(l > 0)
    {
       n = (l-1) % base;
       list.add(0, (int) n+1);
       l = (l-n)/base; 
    }
    return list;
}
于 2017-01-24T23:43:46.117 回答
0

我认为您的方法签名是错误的。该函数似乎将数值转换为它的基本表示形式。

这意味着,返回值必须包含字符串。

您使用 List<...> 的原因是什么,我不清楚。

于 2017-01-24T21:51:35.610 回答