leetcode

Leetcode submissions
git clone git://git.laack.co/leetcode.git
Log | Files | Refs | README

divide-two-integers-V2.dart (1381B)


      1 //Given two integer inputs return the value of them divided
      2 //by each other. To do this you are supposed to not use * / or %.
      3 //Given this first I used recursion but it was too slow so I then
      4 //went iterative with my current solution. 
      5 //Time: 2194ms
      6 //Beats: 6.6%
      7 class Solution {
      8   int divide(int dividend, int divisor) {
      9     if(divisor == 1){
     10     if(dividend > pow(2,31) - 1){
     11       return (pow(2,31) - 1).toInt();
     12     }
     13     if(dividend < pow(-2,31)){
     14       return pow(-2,31).toInt();
     15     }
     16       return dividend;
     17     }
     18     if(divisor == -1){
     19     if(-dividend < pow(-2,31)){
     20       return pow(-2,31).toInt();
     21     }
     22     if(-dividend > pow(2,31) - 1){
     23       return (pow(2,31) - 1).toInt();
     24     }
     25       return -dividend;
     26     }
     27     bool negative = false;
     28     if(dividend < 0){
     29       dividend = dividend.abs();
     30       negative = !negative;
     31     }
     32     if(divisor < 0){
     33       divisor = divisor.abs();
     34       negative = !negative;
     35     }
     36     int ret_val = 0;
     37     while(dividend >= divisor + divisor + divisor){
     38       dividend -= divisor + divisor + divisor;
     39       ret_val += 3;
     40     }
     41     while(dividend >= divisor){
     42       dividend -= divisor;
     43       ret_val += 1;
     44     }
     45     if(-ret_val < pow(-2,31)){
     46       return pow(-2,31).toInt();
     47     }
     48     if(ret_val > pow(2,31) - 1){
     49       return (pow(2,31) - 1).toInt();
     50     }
     51     if(negative){
     52       return -ret_val;
     53     }
     54       return ret_val;
     55   }
     56 }