【Leetcode】Divide Two Integers
2015-11-03 15:50
399 查看
Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT.
简单解法:O(dividend/divisor)
public class Solution {
public int divide(int dividend, int divisor) {
int result = 0;
int negative = 1;
if(dividend < 0 && divisor > 0) {negative = -1; dividend = -dividend;}
if(dividend > 0 && divisor < 0) {negative = -1; divisor = -divisor;}
while(dividend >= 0){
dividend -= divisor;
result++;
}
result--;
return result*negative;
}
}
位移算法:
public class Solution {
public int divide(int dividend, int divisor) {
if(divisor == 0) return Integer.MAX_VALUE;
if(divisor == -1 && dividend == Integer.MIN_VALUE) return Integer.MAX_VALUE;
if(dividend == divisor) return 1;
int result = 0;
int negative = 1;
long divid = (long) dividend;
long divis = (long) divisor;
if(dividend < 0) {divid = -divid;}
if(divisor < 0) {divis = -divis;}
if((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) negative = -1;
long newDivis = divis;
while(divid >= divis){
int i = 1;
while(newDivis <= divid){
newDivis = divis << i;
i++;
}
divid -= divis << (i - 2);
result += 1 << (i-2);
newDivis = divis;
}
return result*negative;
}
}
相关文章推荐
- configure: error: no acceptable C compiler found in $PATH
- Haproxy 8种算法+Session共享
- Linux 主机root登陆以后远程SSH才能访问
- 第一次写程序
- [Leetcode] Rotate List
- VIM语法高亮、VIM代码补全、VIM结构化视图功能的配置实现
- eclipse 以往版本
- Redis数据备份与恢复
- 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)
- hibernate注解实体类
- JavaScript高级程序设计之DOM之节点层次之Attr类型第10.1.9讲
- UICollectionView(一)基本概念
- How to Setup OpenStack to use Local Disks for Instances
- django 操作 下载 excel xls xlsx csv
- 资源收集
- linux---------远程debug
- PHP 删除文件夹下所有文件
- Mysql Merge表的使用注意事项和优点介绍
- Ansible
- iOS应用内付费(IAP)开发步骤列表