腾讯笔试题----格雷码的实现
昨天腾讯C++研发的一道笔试题,给定一个N,求这N位的格雷码,如果不知道格雷码的请自行问度娘。由于当时答题时间比较紧,所以没有考虑清楚到底该怎么做,只是有一个大体的思路,但是还是没有写上去(感觉自己解决问题的能力还是弱啊.....)。
题目已经提示,使用递归求解,既然是递归,我当时想应该利用分治法求解,先设置一位,然后问题的规模就变成N-1,然后再求解,又联想到剑指offer的第12题(打印1到最大的n位数),所以感觉这种思路应该是可以求解的,但是还有一个问题有待解决--怎么满足格雷码的要求(每次变化1位),这个应该是个大问题,想了一会儿也没想出来就放弃了....
交卷以后仔细考虑了一下,查了百度的资料,综合成了自己的答案,下面是我的代码及思路,如果有更好的想法可以留言交流,3Q!
1 #include <iostream> 2 using namespace std; 3 void print(int data[],int n){ 4 for(int i=0;i<n;i++) 5 cout << data[i]; 6 cout << endl; 7 } 8 void mygrey(int cur,int data[],int n){ 9 if(cur==0){ 10 data[cur]=1-data[cur]; //递归终止的条件,cur=0,cur的初始化是n-1,即先设置第0位上的数字 11 print(data,n); 12 } 13 else{ 14 mygrey(cur-1,data,n); //在data[cur]=0的情况下,设置前n-1位 15 data[cur]=1-data[cur]; //修改当前位的值 16 print(data,n); 17 mygrey(cur-1,data,n); //在data[cur]=1的情况下,设置前n-1位的值 18 } 19 } 20 int main(){ 21 const int n=4; 22 int data[n]={0}; 23 print(data,n); 24 mygrey(n-1,data,n); 25 return 0; 26 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?