力扣---2020.5.9

69. x 的平方根

  • 牛顿法
class Solution {
    public int mySqrt(int x) {
        long a = x;
        while(a*a > x){
            a = (a + x/a) / 2;
        }
        return (int)a;
    }
}
  • 二分法
class Solution {
    public int mySqrt(int x) {
        long left = 0;
        long right = x/2 + 1;
        while(left<right){
            long mid = left + (right-left + 1)/2;
            if(mid*mid > x){
                right = mid - 1;
            }else{
                left = mid;
            }
        }
        return (int)left;
    }
}

面试题38. 字符串的排列

class Solution {
    List<String> list = new ArrayList<>();
    public String[] permutation(String s) {
        char[] ch = s.toCharArray();
        dfs(ch,0);
        String[] str = new String[list.size()];
        if(s == null || s.length() == 0) return str;
        for(int i = 0; i < list.size(); i++) {
            str[i] = list.get(i);
        } 
        return str;
    }

    private void dfs(char[] ch,int start){
        if(start==ch.length){
            list.add(new String(ch));
            return;
        }
        Set<Character> set = new HashSet<>();
        for(int i = start;i < ch.length;i++){
            if(set.contains(ch[i])) continue; // 重复,因此剪枝
            set.add(ch[i]);
            swap(ch,start,i);
            dfs(ch,start+1);
            swap(ch,start,i);
        }
    }

    private void swap(char[] ch, int i, int j) {
        char tmp = ch[i];
        ch[i] = ch[j];
        ch[j] = tmp;
    }
}

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

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