Java p的交点
我想计算不是由两个连续的1或3个连续的0组成的位字符串的数量 但不是两者都有 我找到了由两个连续的1或3个连续的0组成的算法,但是我没有找到它们之间的交集,因为我想排除它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开头 如果
例如,我的输入是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«吗?您的示例与第一句中描述的相反。另外,请编辑您的答案,而不是将示例和附加要求放入注释中。