Java p的交点

Java p的交点,java,permutation,bit,Java,Permutation,Bit,我想计算不是由两个连续的1或3个连续的0组成的位字符串的数量 但不是两者都有 我找到了由两个连续的1或3个连续的0组成的算法,但是我没有找到它们之间的交集,因为我想排除它 例如,我的输入是4。我需要找到所有没有三个连续0或两个连续1的4位长度序列。所以答案是5:00101001011001和1010 有什么想法吗? 谢谢。您可以使用以下方法: 递归计算序列数 要知道子序列的数量,我们需要知道子序列之前的两位 如果前一位是1…,则子序列必须以0开头 如果前两位是00…,则子序列必须以1开头 如果

我想计算不是由两个连续的1或3个连续的0组成的位字符串的数量

但不是两者都有

我找到了由两个连续的1或3个连续的0组成的算法,但是我没有找到它们之间的交集,因为我想排除它


例如,我的输入是4。我需要找到所有没有三个连续0或两个连续1的4位长度序列。所以答案是5:00101001011001和1010

有什么想法吗?
谢谢。

您可以使用以下方法:

  • 递归计算序列数
  • 要知道子序列的数量,我们需要知道子序列之前的两位
  • 如果前一位是
    1…
    ,则子序列必须以
    0
    开头
  • 如果前两位是
    00…
    ,则子序列必须以
    1
    开头
  • 如果前面的位与这些模式中的任何一个都不匹配,则子序列可以从
    0
    1
    开始
其余部分应在计划中明确:

public class BitSequences {

    public static void main(String[] args) {
        for (int i = 0; i <= 64; ++i) {
            System.out.println(i + " " + bitSequences(i));
        }
    }

    public static long bitSequences(int length) {
        return bitSequences(length, Bit.NONE, Bit.NONE);
    }

    public static long bitSequences(int length, Bit prePreBit, Bit preBit) {
        if (length <= 0) {
            return 1;
        } else if (preBit == Bit.ONE) {
            return bitSequences(length - 1, preBit, Bit.ZERO);
        } else if (prePreBit == Bit.ZERO && prePreBit == Bit.ZERO) {
            return bitSequences(length - 1, preBit, Bit.ONE);
        }
        return bitSequences(length - 1, preBit, Bit.ONE)
             + bitSequences(length - 1, preBit, Bit.ZERO);
    }

    enum Bit {
        ZERO,
        ONE,
        NONE
    }
}
公共类位序列{
公共静态void main(字符串[]args){

对于(int i=0;我可以请你详细说明一下吗?什么算法不起作用?你希望什么输入有什么输出?例如,我的输入是4。我需要找到所有没有三个连续0或两个连续1的4位长度序列。所以答案应该是5:0010、0100、0101、1001和1010。你在问题中忘记了一个»not«吗?您的示例与第一句中描述的相反。另外,请编辑您的答案,而不是将示例和附加要求放入注释中。