美文网首页每日打卡
2021-11-24 423. 从英文中重建数字

2021-11-24 423. 从英文中重建数字

作者: 16孙一凡通工 | 来源:发表于2021-11-24 11:29 被阅读0次

    有一说一,觉得官方的思路太取巧了,于是就试着按照比较一般化的思路做的,发现运算量还挺大的。采用哈希表的思路。运算复杂度较高,但具有一般性。

    java版本

    class Solution {
        public String originalDigits(String s) {
    
          int tmp=0;
          int key_value=0;
          String[] nums=new String[]{"zero","six","eight","two","seven","five","four","three","one","nine"};
         int[] seq=new int[]{0,6,8,2,7,5,4,3,1,9};
          List<Integer> arr_res=new ArrayList<Integer>();
         
           HashMap<String,Integer> hashmap=new HashMap<String,Integer>();
           for(int i=0;i<s.length();i++){
               String key=s.substring(i,i+1);
               if(hashmap.containsKey(key)){
             key_value=hashmap.get(key);
             key_value++;
              hashmap.replace(key,key_value); 
           }else{
            hashmap.put(key,1);
           }
        }
     
        StringBuffer buff= new StringBuffer("");
        String num,key;
        int visit;
        for (int i=0;i<nums.length;i++){
           num=nums[i];
           tmp=0; 
           visit=0;
           while(tmp==0){
             visit=0;
            for (int j=0;j<num.length();j++){
                key=num.substring(j,j+1);
             if(!hashmap.containsKey(key) || hashmap.get(key)==0 ){
                tmp=1;
               }else{
                   visit++;
             }
           }
           if(visit==num.length()){
                for (int j=0;j<num.length();j++){
                     key=num.substring(j,j+1);
                    key_value=hashmap.get(key);
                //    System.out.println(key+":"+key_value);
                    key_value--;
                    hashmap.replace(key,key_value);
                }
           }
              
           if(tmp==0){
           arr_res.add(seq[i]);
           }  
           }     
        }
        Collections.sort(arr_res);
        for(int i=0;i<arr_res.size();i++){
            buff.append(String.valueOf(arr_res.get(i)));
        }
        
        return buff.toString();
        }
    }
    

    剑指 Offer II 004. 只出现一次的数字

    java版本哈希表思路,很好理解和实现,Go版本参考了官方思路,实在想不到位运算的思路。
    java版本

    class Solution {
        public int singleNumber(int[] nums) {
            HashMap<Integer,Integer> hashmap=new HashMap<Integer,Integer>();
    
            for(int i=0;i<nums.length;i++){
                
                if(hashmap.containsKey(nums[i])){
                    hashmap.replace(nums[i],3);
                }else{
                 hashmap.put(nums[i],1);
                }
             
            }
            for(int key:hashmap.keySet()){
                if (hashmap.get(key)==1){
                    return key;
                }
            }
            return 0;
    
        }
    }
    

    Go版本

    func singleNumber(nums []int) int {    
        ans:=int32(0)
    
       for i:=0;i<32;i++{
           total:=int32(0)
        for _,num:=range nums{
            total+=int32(num)>>i&1; 
        }
        if total%3>0{
            ans|= 1<<i;
        }
       }
       return int(ans);
    }
    

    相关文章

      网友评论

        本文标题:2021-11-24 423. 从英文中重建数字

        本文链接:https://www.haomeiwen.com/subject/ahsntrtx.html