math
sjphiChina
代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
展开
-
Pow(x, n)
最朴素的想法会超时,当n特别大的时候。pow(x,n)就是求x的n次方。x的N次方可以看做:x^n = x^(n/2)*x^(n/2)*x^(n%2)。所以利用递归求解,当n==0,返回1。public class Solution { public double myPow(double x, int n) { if (n < 0) {原创 2016-06-29 11:31:56 · 306 阅读 · 0 评论 -
Ugly Number II
参考:点击打开链接根据提示中的信息,我们知道丑陋数序列可以拆分为下面3个子列表:(1) 1×2, 2×2, 3×2, 4×2, 5×2, …(2) 1×3, 2×3, 3×3, 4×3, 5×3, …(3) 1×5, 2×5, 3×5, 4×5, 5×5, …仔细观察上述三个列表,我们可以发现每个子列表都是一个丑陋数分别乘以2,3,5,而要求的丑陋数就是从已经生原创 2016-07-24 16:43:38 · 228 阅读 · 0 评论 -
Ugly Number
参考:点击打开链接检测一个数是否为丑陋数,所谓丑陋数就是其质数因子只能是2,3,5。那么最直接的办法就是不停的除以这些质数,如果剩余的数字是1的话就是丑陋数了public class Solution { public boolean isUgly(int num) { while (num >= 2) { if (num % 2 == 0)原创 2016-07-24 16:15:20 · 249 阅读 · 0 评论 -
Factorial Trailing Zeroes
参考:点击打开链接public class Solution { public int trailingZeroes(int n) { int sum= 0; while (n > 0) { sum += n/5; n = n/5; } return sum; }}原创 2016-07-24 15:32:20 · 213 阅读 · 0 评论 -
Power of Four
这个不错,红红火火恍恍惚惚哼哼哈嘿public class Solution { public boolean isPowerOfFour(int num) { int count1 = 0; int count0 = 0; while (num > 0) { count1 += num & 1;原创 2016-07-24 15:09:44 · 199 阅读 · 0 评论 -
Power of Three
这个掌握最基本的迭代就好。public class Solution { public boolean isPowerOfThree(int n) { if (n == 0) { return false; } return n == Math.pow(3, Math.round(Math.log(n)/Math.原创 2016-07-24 15:01:21 · 226 阅读 · 0 评论 -
Integer to English Words
此题当中有很多要注意的点:1. 各个字符数组的开头,都是空字符串;2. less100的下标第1个字符串是空的;3. 各个不同的空格;4. 最后返回res得做trim()处理;5. helper中的helper递归调用都是放在结尾的;6. 还是背一背吧,哈哈public class Solution { private final String[] less20原创 2016-07-01 15:17:19 · 230 阅读 · 0 评论 -
Power of Two
参考:点击打开链接那么我们来观察下2的次方数的二进制写法的特点:1 2 4 8 16 ....1 10 100 1000 10000 ....那么我们很容易看出来2的次方数都只有一个1,剩下的都是0,所以我们的解题思路就有了,我们只要每次判断最低位是否为1,然后向右移位,最后统计1的原创 2016-07-24 14:30:24 · 220 阅读 · 0 评论 -
Bitwise AND of Numbers Range
参考:点击打开链接直接平移m和n,每次向右移一位,直到m和n相等,记录下所有平移的次数i,然后再把m左移i位即为最终结果public class Solution { public int rangeBitwiseAnd(int m, int n) { int i = 0; while (m != n) { m >>=原创 2016-07-24 14:21:06 · 200 阅读 · 0 评论 -
Reverse Bits
参考:点击打开链接follow up 以后再看public int get(int n) { int res = 0; for (int i = 0; i >= 1) { res = res << 1 | (n & 1) }}原创 2016-07-24 14:09:27 · 188 阅读 · 0 评论 -
Fraction to Recurring Decimal
最好的参考:点击打开链接理解这几行就好了:nu = nu*10; sb.append(nu/de); nu = nu%de;public class Solution { public String fractionToDecimal(int numerator, int denominator) {原创 2016-07-24 13:26:21 · 218 阅读 · 0 评论 -
Sqrt(x)
这个记住是2分法处理,i从0,j从x/2+1开始算。当中,必须用long而非int,否则遇到类似2147395599的大数,会超过int的范围,出差。public class Solution { public int mySqrt(int x) { long i = 0; long j = x/2 + 1; while (i <=原创 2016-06-29 11:56:48 · 270 阅读 · 0 评论 -
Next Permutation
这个就是一定要理解如何求下一个排列的数学规律。用一个例子来说明,比如排列是(2,3,6,5,4,1),求下一个排列的基本步骤是这样:1) 先从后往前找到第一个不是依次增长的数,记录下位置p。比如例子中的3,对应的位置是1;2) 接下来分两种情况: (1) 如果上面的数字都是依次增长的,那么说明这是最后一个排列,下一个就是第一个,其实把所有数字反转过来即可(比如(6,5,4,3原创 2016-06-20 13:30:28 · 176 阅读 · 0 评论