16年腾讯笔试模拟题
2016-03-26 13:26
253 查看
1、利用递归计算n位的格雷码greycode:二进制数据,相邻的两个元素只有一位不同
2、找到数组中出现大于n/2次的元素
3、大整数相乘
public static List<String> getGreyCode(int n){ List<String> list=new ArrayList<String>(); if(n==0)return list; if(n==1){ list.add("0"); list.add("1"); return list; } List<String> last=getGreyCode(n-1); int mark=0; for(String str:last){ if(mark%2==0){ list.add("0"+str); list.add("1"+str); }else{ list.add("1"+str); list.add("0"+str); } mark++; } return list; }
2、找到数组中出现大于n/2次的元素
public static int findMajor(int []val){ if(val.length==1)return val[0]; int value=val[0]; int count=1; for(int i=1;i<val.length;i++){ if(val[i]==value)count++; else count--; if(count==0){ value=val[i]; count++; } } return value; }
3、大整数相乘
public static String calculate(String str1,String str2){ int len1=str1.length(); int len2=str2.length(); int val[]=new int[len1+len2]; for(int i=len1-1;i>=0;i--) for(int j=len2-1;j>=0;j--){ val[i+j+1]+=Integer.parseInt(str1.charAt(i)+"")*Integer.parseInt(str2.charAt(j)+""); val[i+j]+=val[i+j+1]/10; val[i+j+1]=val[i+j+1]%10; } String str=Arrays.toString(val); return str; }