在java中编写一个函数来查找正整数N的二进制周期

时间:2015-11-30 10:22:13

标签: java binary bit-manipulation

给出了由Q字符组成的非空零索引字符串S.该字符串的周期是最小的

正整数P使得:

P≤Q/ 2和 对于0≤K

例如,7是“pepsicopepsicopep”的时期。 如果M是N的二进制表示的周期,则正整数M是正整数N的二进制周期。

例如, 1651 具有" 110011100111"的二进制表示。因此,其二进制周期为5 。另一方面,102没有二进制周期,因为它的二进制表示是“1100110”并且它没有句点。

考虑上述情况&用Java编写一个函数,它接受一个整数N作为参数。给定正整数N,该函数返回N的二进制周期。如果N没有二进制周期,则函数应返回-1。

下面我已经包含了我为它工作的解决方案。我想知道是否还有其他更好的方法可以解决它?

1 个答案:

答案 0 :(得分:3)

public class BinaryPeriod {

    public static void main(String[] args) {
        System.out.println("\nEx1: " + getBinaryPeriodForInt(102));
        System.out.println("\nEx2: " + getBinaryPeriodForInt(1651));
    }

    static int getBinaryPeriodForInt(int n) {
        int[] d = new int[30];
        int l = 0, res = -1;
        while (n > 0) {
            d[l] = n % 2;
            n /= 2;
            l++;
        }

        for (int p = 1; p < l; p++) {
            if (p <= l / 2) {
                boolean ok = true;
                for (int i = 0; i < l - p; i++) {
                    if (d[i] != d[i + p]) {
                        ok = false;
                        break;
                    }
                }
                if (ok) {
                    res = p;
                }
            }
        }

        return res;
    }
}