leetcode 题型整理之数字加减乘除乘方开根号

需要注意overflow,特别是Integer.MIN_VALUE这个数字。

需要掌握二分法。

不用除法的除法,分而治之的乘方

2. Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

基本等于合并数组,记得要最后加上carry位。

不需要考虑overflow,但是记得当输入两个空链表的时候输出0而不是空链表。

29. Divide Two Integers

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

If it is overflow, return MAX_INT.

不能使用除法的除法,让除数不停地乘以二直到会大于被除数为止。

核心代码如下:

while (x >= y) {
    int a = 0;
    while (x >= (y << a)) {
        a++;
    }
    a--;
    result += (long)1 << a;
    x -= y << a;
}    

其中,x是被除数,y是除数,这段代码里,还需注意x,y都是long。1要被强制转换为long

这道题有很多corner case,具体见

[leetcode] 29. divide two integers

43. Multiply Strings

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note:

  • The numbers can be arbitrarily large and are non-negative.
  • Converting the input string to integer is NOT allowed.
  • You should NOT use internal library such as BigInteger.
  • 按照我目前的解法没有什么corner case需要考虑,只要把输出数字前面多余的0去掉就可以了。但是现在的解法比较慢。有空的时候再改进吧。

50. Pow(x, n)

Implement pow(xn).

1. 0的0次方是1

2. 判断x是否为0,n是否为0,x是否是1

3. 判断x的正负性,判断n的正负性。

4. 注意n是Integer.MIN_VALUE的情况,这种情况下取绝对值的时候会overflow

BTW,Double.MIN_VALUE定义的是大于0的最小正数哦~

leetcode的testcase没有涉及到double overflow的情况,double overflow的时候直接返回MAX_VALUE了?

时间: 2024-10-13 11:35:24

leetcode 题型整理之数字加减乘除乘方开根号的相关文章

[leetcode]题型整理之用bit统计个数

137. Single Number II Given an array of integers, every element appears three times except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 记录32个bit每个bit出现的

[leetcode] 题型整理之图论

图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, such that: Only one letter can be

leetcode 题型 数据结构 解法 分类总结

第2章 线性表 2.1 数组 2.1.1 Remove Duplicates from Sorted Array 2.1.2 Remove Duplicates from Sorted Array II 2.1.3 Search in Rotated Sorted Array 2.1.4 Search in Rotated Sorted Array II 2.1.5 Median of Two Sorted Arrays 2.1.6 Longest Consecutive Sequence 2.

刷题向》关于线段树的区间开根号 BZOJ3211

这是一道关于线段树的区间开根号的裸题,没什么好讲的. 值得注意的是,因为有区间开根号的性质,所以我们每一次更改操作只能把更改区间所覆盖的所有元素全部查找,当然你直接找效率明显爆炸... 能够注意到,指数级别的操作一次更改的数字都很大,而题目的数字最大是10的9次,所以可以注意到的是当一个区间更新6遍以后就失去更新的意义了,因为当你更改次数超过6次所有非负整数数字就全部会化为1.所以可以在每一个节点上加一个类似于LAZY标记的东西,记录开根号次数,以便节约跟新时间. 贴出题目&代码 Descrip

luogu P4145 上帝造题的七分钟2 / 花神游历各国 维护区间和&amp;&amp;区间开根号

因为开根号能使数字减小得非常快 所以开不了几次(6次?)很大的数就会变成1..... 所以我们可以维护区间最大值,若最大值>1,则继续递归子树,暴力修改叶节点,否则直接return (好像也可以维护区间被开方的次数,但我不会...QAQ) #include<cstdio> #include<iostream> #include<cmath> #define int long long #define R register int #define ls (tr<

MatLab 计算开根号

对X要开根号 方法1 >> sqrt(X) 方法2 >> X^(1/2)

HDU 5828 Rikka with Sequence(线段树 开根号)

Rikka with Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2777    Accepted Submission(s): 503 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situati

H - Can you answer these queries? HDU 4027 (线段树+延迟标记+开根号的速度)

H - Can you answer these queries? Time Limit:2000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4027 Description A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our

c# 开根号 牛顿迭代

double n = 1,m;               Console.WriteLine("请输入您要开根号的数:");               m = Convert.ToDouble(Console.ReadLine());               for (int i = 0; 1==1; i++)               {                   n = (n + m / n) /2;