概述
递归方式
class GrayCode {
public:
vector<string> getGray(int n) {
// write code here
vector<string> res;
if(n == 1) {
res.push_back("0");
res.push_back("1");
return res;
}
vector<string> v = getGray(n - 1);
for(int i = 0; i < v.size(); i++) {
res.push_back("0" + v[i]);
}
for(int i = v.size() - 1; i >= 0; i--) {
res.push_back("1" + v[i]);
}
return res;
}
};
迭代方式
void Gray(int n)
{
if(n<=0)
return;
vector<string> result;
int len=pow(2,n);
result.reserve(len);
result.push_back("0");
result.push_back("1");
for(int i=1;i<n;i++)
{
for(int j=result.size();j>0;)
{
result.push_back(result[--j]);
}
for(int j=0;j<result.size()/2;j++)
result[j]="0"+result[j];
for(int j=result.size()/2;j<result.size();j++)
result[j]="1"+result[j];
}
for(int i=0;i<len;i++)
cout<<result[i]<<endl;
}
递推方式
void gray_code(int n)
{
int *a=new int[1<<n];
for(int i=0;i<1<<n;i++)
{
a[i]=i<<1^i;
}
}
<pre class="html" name="code">void _10_2(int n,int nb=0)//十进制转为二进制字符串
{
int m = log(n*1.0) / log(2.0);
if (nb != 0)
{
string rreess(nb, '0');
for (int i = 0; i <= m; i++)
{
int r = (n&(1 << (m - i))) >> (m - i);
rreess[nb - m - 1 + i] = r + '0';
}
cout << rreess;
}
else
{
char res[1000] = { 0 };
for (int i = 0; i <= m; i++)
{
int r = (n&(1 << (m - i))) >> (m - i);
res[i] = r + '0';
}
cout << res;
}
}
最后
以上就是合适画板为你收集整理的格雷码的几种实现方式 递归 迭代 递推的全部内容,希望文章能够帮你解决格雷码的几种实现方式 递归 迭代 递推所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复