zoukankan      html  css  js  c++  java
  • leetcode 235-290 easy

    235. Lowest Common Ancestor of a Binary Search Tree

    公共的祖先必定大于左点小于右点,否则不断递归到合适。

    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            if ((root -> val > p -> val) && (root -> val > q -> val)) {
                return lowestCommonAncestor(root -> left, p, q);
            }
            if ((root -> val < p -> val) && (root -> val < q -> val)) {
                return lowestCommonAncestor(root -> right, p, q);
            }
            return root;
        }
    };
    
    
    /////////////////////////////////
    
    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            TreeNode* cur = root;
            while (true) {
                if ((cur -> val > p -> val) && (cur -> val > q -> val)) {
                    cur = cur -> left;
                } else if ((cur -> val < p -> val) && (cur -> val < q -> val)) {
                    cur = cur -> right;
                } else {
                    return cur;
                }
            }
        }
    };

    257. Binary Tree Paths

    void binaryTreePaths(vector<string>& result, TreeNode* root, string t) {
        if(!root->left && !root->right) {
            result.push_back(t);
            return;
        }
    
        if(root->left) binaryTreePaths(result, root->left, t + "->" + to_string(root->left->val));
        if(root->right) binaryTreePaths(result, root->right, t + "->" + to_string(root->right->val));
    }
    
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> result;
        if(!root) return result;
        
        binaryTreePaths(result, root, to_string(root->val));
        return result;
    }

    258. Add Digits

    Iteration method
    
      class Solution(object):
      def addDigits(self, num):
        """
        :type num: int
        :rtype: int
        """
        while(num >= 10):
            temp = 0
            while(num > 0):
                temp += num % 10
                num /= 10
            num = temp
        return num
    Digital Root
    
    this method depends on the truth:
    
    N=(a[0] * 1 + a[1] * 10 + ...a[n] * 10 ^n),and a[0]...a[n] are all between [0,9]
    
    we set M = a[0] + a[1] + ..a[n]
    
    and another truth is that:
    
    1 % 9 = 1
    
    10 % 9 = 1
    
    100 % 9 = 1
    
    so N % 9 = a[0] + a[1] + ..a[n]
    
    means N % 9 = M
    
    so N = M (% 9)
    
    as 9 % 9 = 0,so we can make (n - 1) % 9 + 1 to help us solve the problem when n is 9.as N is 9, ( 9 - 1) % 9 + 1 = 9
    
    ///就是一个数的数根等于该数各位数的和的mod 9
    /// (num-1)%9+1 等于 num%9,这为了解决9的树根时9而不是0的问题 class Solution(object): def addDigits(self, num): """ :type num: int :rtype: int """ if num == 0 : return 0 else:return (num - 1) % 9 + 1

    263. Ugly Number

    bool isUgly(int num) {
        if(num == 0) return false;
        
        while(num%2 == 0) num/=2;
        while(num%3 == 0) num/=3;
        while(num%5 == 0) num/=5;
        
        return num == 1;
    }

    268. Missing Number

    1.XOR
    相同则为0。num[]的数字和下标一样
    public int missingNumber(int[] nums) { //xor int res = nums.length; for(int i=0; i<nums.length; i++){ res ^= i; res ^= nums[i]; } return res; } 2.SUM public int missingNumber(int[] nums) { //sum int len = nums.length; int sum = (0+len)*(len+1)/2; for(int i=0; i<len; i++) sum-=nums[i]; return sum; } 3.Binary Search public int missingNumber(int[] nums) { //binary search Arrays.sort(nums); int left = 0, right = nums.length, mid= (left + right)/2; while(left<right){ mid = (left + right)/2; if(nums[mid]>mid) right = mid; else left = mid+1; } return left; } Summary: If the array is in order, I prefer Binary Search method. Otherwise, the XOR method is better.

    283. Move Zeroes

    class Solution {
    public:
        void moveZeroes(vector<int>& nums) {
            int j = 0;
            // move all the nonzero elements advance
            for (int i = 0; i < nums.size(); i++) {
                if (nums[i] != 0) {
                    nums[j++] = nums[i];
                }
            }
            for (;j < nums.size(); j++) {
                nums[j] = 0;
            }
        }
    };

    290. Word Pattern

    Input: pattern = "abba", str = "dog cat cat dog"
    Output: true
    bool wordPattern(string pattern, string str) {
        map<char, int> p2i;
        map<string, int> w2i;
        istringstream in(str);
        int i = 0, n = pattern.size();
        for (string word; in >> word; ++i) {
            if (i == n || p2i[pattern[i]] != w2i[word])
                return false;
            p2i[pattern[i]] = w2i[word] = i + 1;
        }
        return i == n;
    }
  • 相关阅读:
    3、选择排序(最小值/最大值)
    2、冒泡排序
    1、快速排序
    Stream操作
    1. 两数之和
    Mysql修改字段类型修改
    获取节假日
    mysql 前缀 + 编号 补0
    一口气说出 6种@Transactional注解的失效场景
    Activiti最全入门教程(基于Eclipse插件开发)
  • 原文地址:https://www.cnblogs.com/hotsnow/p/9741683.html
Copyright © 2011-2022 走看看