力扣---2020.6.9

面试题46. 把数字翻译成字符串

class Solution {
    public int translateNum(int num) {
        String s = num + "";
        int[] dp = new int[s.length()+2];
        dp[0] = 1;
        dp[1] = 1;
        for(int i = 2;i<dp.length;i++){
            char c = s.charAt(i-2);
            if((i+1<dp.length) && (c == '1'|| (c=='2'&& s.charAt(i-1)<='5'))){
                dp[i] = dp[i-1] + dp[i-2];
            }else{
                dp[i] = dp[i-1];
            }
        }
        return dp[dp.length-1];
    }
}
class Solution {
    public int translateNum(int num) {
        if (num<=9) {return 1;}
        //获取输入数字的余数,然后递归的计算翻译方法
        int ba = num%100;
        //如果小于等于9或者大于等于26的时候,余数不能按照2位数字组合,比如56,只能拆分为5和6;反例25,可以拆分为2和5,也可以作为25一个整体进行翻译。
        if (ba<=9||ba>=26) {return translateNum(num/10);}
        // ba=[10, 25]时,既可以当做一个字母,也可以当做两个字母
        else  {return translateNum(num/10)+translateNum(num/100);}
    }
}
class Solution {
    public int translateNum(int num) {
        String s = String.valueOf(num);
        int a = 1, b = 1;
        for(int i = 2; i <= s.length(); i++) {
            String tmp = s.substring(i - 2, i);
            int c = tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0 ? a + b : a;
            b = a;
            a = c;
        }
        return a;
    }
}

面试题 16.24. 数对和

class Solution {
    public List<List<Integer>> pairSums(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<>();

        List<List<Integer>> ans = new ArrayList<>();
        for(int num:nums){
            Integer count = map.get(target-num);
            if(count!=null){
                ans.add(Arrays.asList(num,target-num));
                if(count==1){
                    map.remove(target-num);
                }else{
                    map.put(target-num,--count);
                }
            }else{
                map.put(num,map.getOrDefault(num,0)+1);
            }
        }
        return ans;
    }
}
class Solution {
    public List<List<Integer>> pairSums(int[] nums, int target) {
        List<List<Integer>> res = new LinkedList<>();
        Arrays.sort(nums);
        int left = 0;
        int right = nums.length-1;
        while(left<right){
            int sum = nums[left] + nums[right];
            if(sum==target){
                List<Integer> pair = new LinkedList<>();
                pair.add(nums[left]);
                pair.add(nums[right]);
                res.add(pair);
                left++;
                right--;
            }else if(sum>target){
                right--;
            }else{
                left++;
            }
        }
        return res;
    }
}

面试题 16.09. 运算

//目前还没看到好的办法........
class Operations {

    public Operations() {

    }
    
    int minus(int a, int b) {
        return a-b;
    }
    
    int multiply(int a, int b) {
        return a*b;
    }
    
    int divide(int a, int b) {
        return a/b;
    }
}

你知道的越多,你不知道的越多。

你可能感兴趣的:(数据结构与算法)