小编典典

用二进制数填充矩阵,常规和格雷编码

algorithm

我有一个保存1:s或0:s的矩阵,创建了二进制数。其宽度为n。对于n = 2和n = 3,它看起来像:

00  000
01  001
10  010
11  011
    100
    101
    110
    111

等等。现在,我正在使用以下代码来生成此代码。

int row = (int) Math.pow(2, n);
int col = n;
int[][] matrix = new int[row][col];
for (int r = 0; r < row; r++) {
    String binaryNumber = String.format("%" + n + "s", Integer.toBinaryString(r)).replace(' ', '0');
    for (int c = col - 1; c >= 0; c--) {
        matrix[r][c] = Integer.parseInt("" + binaryNumber.charAt(0));
        binaryNumber = binaryNumber.substring(1);
    }
}

现在,我需要帮助创建相同的东西,但使用灰色编码。在Java中有方便的方法吗?另外,如果有一种更聪明的方式来做我在做的事情,我将很乐于学习。

因为我已经习惯了toBinaryString()帮助我,所以我真的不知道从哪里开始。编辑:灰色代码将如下所示:

00  000
01  001
11  011
10  010
    110
    111
    101
    100

阅读 241

收藏
2020-07-28

共1个答案

小编典典

您只需更改即可获得格雷码

Integer.toBinaryString(r)

进入

Integer.toBinaryString((r >> 1) ^ r)

试试:)

2020-07-28