1. 格雷码到十进制,二进制表示转换
格雷码转为十进制
//转为二进制
t[0] = s[0] - '0';
for(int i = 1; i < len; i++) t[i] = t[i - 1] ^ (s[i] - '0');
//转为十进制 res
int res = 0;
for(int i = 0; i < len; i++) res = res * 2 + t[i];
return res;
2. C(m,n)组合数计算
将空间复杂度从O(n^2)优化成了O(n)
int main() {
int n, m;
cin >> n >> m;
int dp[2][n + 1];
dp[0][0] = 1;
for(int i = 1; i < n + 1; i++) {
for(int j = 0; j <= i; j++) {
if(j == 0 || i == j) dp[i & 1 ][j] = 1;
else {
int t1 = dp[(i - 1) & 1][j];
int t2 = dp[(i - 1) & 1 ][j - 1];
dp[i & 1][j] = t1 + t2 ;
}
}
}
cout<<dp[n & 1][m];
return 0;
}