• 【LeetCode】029. Divide Two Integers


    Divide two integers without using multiplication, division and mod operator.

    If it is overflow, return MAX_INT.

    题解:

      思路就是被除数减去除数,减尽为止。优化的方法是尽量少的做减法。由于不能用乘法,可以利用位操作,左移一位即为该数乘上2

    Solution 1

     1 class Solution {
     2 public:
     3     int divide(int dividend, int divisor) {
     4         if (divisor == 0 || (dividend == INT_MIN && divisor == -1)) return INT_MAX;
     5         long long m = abs((long long)dividend);  
     6         long long n = abs((long long)divisor);  
     7         
     8         int sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1;
     9         int res = 0;
    10         while (m >= n) {
    11             long long tmp = n, p = 1;
    12             while (m >= (tmp << 1)) {
    13                 tmp <<= 1;
    14                 p <<= 1;
    15             }
    16             m -= tmp;
    17             res += p;
    18         }
    19         return sign == 1 ? res : -res;
    20     }
    21 };

     Solution 2 

     1 class Solution {
     2 public:
     3     int divide(int dividend, int divisor) {
     4         if (!divisor || dividend == INT_MIN && divisor == -1) 
     5             return INT_MAX;
     6         int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
     7         unsigned dvd = abs(dividend);
     8         unsigned dvs = abs(divisor);
     9         int res = 0;
    10         while (dvd >= dvs) {
    11             unsigned temp = dvs, multiple = 1;
    12             // 不可写作 dvd >= (tmp << 1),因为有可能溢出
    13             while (dvd - temp >= temp) { 
    14                 temp <<= 1;
    15                 multiple <<= 1;
    16             }
    17             dvd -= temp;
    18             res += multiple;
    19         }
    20         return sign * res;
    21     }
    22 };
  • 相关阅读:
    whatweb tree
    testUrl
    ParseUrl
    whatweb wordpress.rb
    LeetCode: Binary Tree Level Order Traversal 解题报告
    LeetCode: Minimum Path Sum 解题报告
    Lintcode: Sort Colors II 解题报告
    LeetCode: Validate Binary Search Tree 解题报告
    LeetCode: Longest Common Prefix 解题报告
    LeetCode: Maximum Subarray 解题报告
  • 原文地址:https://www.cnblogs.com/Atanisi/p/8648060.html
Copyright © 2020-2023  润新知