Java 以恒定时间指定基于条件的二进制代码

Java 以恒定时间指定基于条件的二进制代码,java,binary,Java,Binary,问题公式:给定两个整数t和l,指定一个长度为l的二进制代码,这样在恒定时间内,每个(t-1)位都有值为1的位 例如,给定t=3和l=10,结果为1001 我能想到的解决方案是对值为1的二进制代码进行一些移位: A1=1 A2=A1>>3 A3=A1>>(3x2) result=A1||A2||A3 然而,这种解决方案并不有效 我想在固定时间内解决这个问题 也许你需要这样的东西: public class SomeClass { public static

问题公式:给定两个整数t和l,指定一个长度为l的二进制代码,这样在恒定时间内,每个(t-1)位都有值为1的位

例如,给定t=3和l=10,结果为1001

我能想到的解决方案是对值为1的二进制代码进行一些移位:

A1=1 

A2=A1>>3

A3=A1>>(3x2)

result=A1||A2||A3
然而,这种解决方案并不有效


我想在固定时间内解决这个问题

也许你需要这样的东西:

public class SomeClass {
    public static void main(String args[]) {
        int l = 15;
        for(int t = 1; t < 10; ++t) {
            System.out.println(t + " " + l + " => " + toBinString(solve(t, l), l));
        }
    }
    public static String toBinString(int value, int length) {
        String s = "";
        for(int i = 0; i < length; ++i)
            s += (char)('0' + (value >> i & 1));
        return s;
    }
    public static int solve(int t, int l) {
        return ((1 << (l + t - 1)) - 1) / ((1 << t) - 1);
    }
}
公共类SomeClass{
公共静态void main(字符串参数[]){
int l=15;
对于(int t=1;t<10;++t){
System.out.println(t+“”+l+“”=>“+toBinString(solve(t,l),l));
}
}
公共静态字符串toBinString(int值,int长度){
字符串s=“”;
对于(int i=0;i>i&1));
返回s;
}
公共静态整数求解(整数t,整数l){
返回((1 101010101010101
3 15 => 001001001001001
4 15 => 001000100010001
5 15 => 000010000100001
6 15 => 001000001000001
7 15 => 100000010000001
8 15 => 000000100000001
9 15 => 000001000000001

我怀疑你能在“恒定”时间内完成它。至少,它是O(l),不是吗?我不完全理解你的解决方案,但我认为它不能在恒定时间内解决问题。@EricHuang,你是认真的吗?只要看看函数“
solve(int t,int l)
”,就没有循环。“
((1
1 15 => 111111111111111
2 15 => 101010101010101
3 15 => 001001001001001
4 15 => 001000100010001
5 15 => 000010000100001
6 15 => 001000001000001
7 15 => 100000010000001
8 15 => 000000100000001
9 15 => 000001000000001