16年騰訊筆試模擬題

1、利用遞歸計算n位的格雷碼greycode:二進制數據,相鄰的兩個元素只有一位不同

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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章