leetcode-数学总结

版权声明:此文章为许诗宇所写,如需转载,请写下转载文章的地址 https://blog.csdn.net/xushiyu1996818/article/details/83054449

leetcode-412 -Fizz Buzz-(fizz bzz)-java
解法1(成功,6ms,较慢)
不用对数进行mod,直接设置mod参数,mod3,mod5,每次+1,到3,5,为0
其余剩余别人的做法是直接对i%3的做法

还有i变为string类型除了string.valueof(i) 还有i+""

leetcode-204-计数质数(count primes)-java
解法1 把每个数mod质数列表,如果没有mod为0的,则把这个数加入质数列表,如果质数>该数的开方+1,则不再检测,少了很多时间
但这个方法不好
解法2
使用见埃拉托色尼筛法。
好方法
说的都是对循环条件的处理:
如果要实现筛法,需要一个O(n)的数组来存储每一个数是不是素数,暂定为true,筛选,把不是素数的定为false,最终数组里为true的就是所有的素数了。如何筛选?p是素数,那么2p, 3p……一定不是素数。事实上,如果筛的是2p, 3p……那么考虑 2*3这个数,它被2筛了一次,又被3筛了一次,没有必要。可以这样筛选:对于每一个素数p,筛掉p^{2}, p^{2}+p, p^{2} + 2p……
并不需要对[2, n]的每一个数进行筛选,只需要对[2, \sqrt{n}]进行筛选,即可筛出所有不是素数的数。

leetcode-32-3的幂(power of three)-java
1 题目中的Follow up让我们不用循环,那么有一个投机取巧的方法,由于输入是int,正数范围是0-231,在此范围中允许的最大的3的次方数为319=1162261467,那么我们只要看这个数能否被n整除即可

2 利用对数的换底公式来做,高中学过的换底公式为logab = logcb / logca,那么如果n是3的倍数,则log3n一定是整数,我们利用换底公式可以写为log3n = log10n / log103,注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错,原因请看这个帖子。现在问题就变成了判断log10n / log103是否为整数,在c++中判断数字a是否为整数,我们可以用 a - int(a) == 0 来判断

leetcode-13-罗马数字转整数(roman to integer)-java
直接得到当前的char,将char转为对应的数字,将now与prev对比,如果now大,说明是4或9,result=result+now-2prev;(4=1+5-21)
否则+now,然后prev=now
把switch换为map,应该可以快一点
只有在IXC的情况下才考虑prev 又可以快一点

猜你喜欢

转载自blog.csdn.net/xushiyu1996818/article/details/83054449
今日推荐