作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个包含 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
最佳答案
只需更改即可得到格雷码
Integer.toBinaryString(r)
进入
Integer.toBinaryString((r >> 1) ^ r)
。
试一试:)
关于java - 用二进制数填充矩阵,常规和格雷编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652524/
我是一名优秀的程序员,十分优秀!