leetcode 7 整数反转
思路分析:记住就好。对10取余,将取余的结果,也就是最低位当成高位,之后对x除以10来减少位数。最简单的数学题。需要注意的是,溢出就返回0,这里定义一个long类型,溢出int型范围的数都返回0,没溢出的强转成int。**(非常实际的做法)**类似的题目还有第9、1281题。
class Solution {
public int reverse(int x) {
long sum=0;
while(x!=0){
int n=x%10;
x/=10;
sum=sum*10+n;
}
if(sum>Integer.MAX_VALUE||sum<Integer.MIN_VALUE){
return 0;
}
return (int)sum;
}
}
leetcode 50题 Pow(x,n)
思路:首先必须掌握api。如果连api都不能掌握的话,那一定是做不出来的。
class Solution {
public double myPow(double x, int n) {
return Math.pow(x,n);
}
}
leetcode 69 x的平方根
思路:首先必须掌握api。如果连api都不能掌握的话,那一定是做不出来的。
class Solution {
public int mySqrt(int x) {
return (int)(Math.sqrt(x));
}
}
leetcode 172阶乘后的零
思路:题目提示了5!有一个0,那么只需要关注一个数包含几个5即可。可以记住这个结论。一个数是5的几倍,阶乘就有几个零
class Solution {
public int trailingZeroes(int n) {
int count = 0;
while(n >= 5) {
count += n / 5;
n /= 5;
}
return count;
}
}
leetcode49 丑数(重要的一道题)
思路分析:只包括因子2,3,5的数称为丑数。可以注意到2,3,5是互质的。那么把2,3,5作为基本指针。之后让i从1开始遍历到n。为了减少重复计算,取最小的那个。乘以哪个因子就对哪个因子的指针后移。
class Solution {
public int nthUglyNumber(int n) {
if(n<=0){
return -1;
}
int[] dp = new int[n];
dp[0]=1;
int id2=0,id3=0,id5=0;
for(int i=1;i<n;i++){
dp[i]=Math.min(dp[id2]*2,Math.min(dp[id3]*3,dp[id5]*5));
if(dp[id2]*2==dp[i])
id2+=1;
if(dp[id3]*3==dp[i]){
id3+=1;
}
if(dp[id5]*5==dp[i]){
id5+=1;
}
}
return dp[n-1];
}
}
leetcode 剑指offer 面试题14-1 剪绳子(经典题)
思路:把一个数不停地分割成3+4那么它的乘积就是最大的。这是需要记住的结论。 即一个数减到4就不减了,直接乘。不然就给他减3。
class Solution {
public int cuttingRope(int n) {
if(n==1||n==2){
return 1;
}
if(n==3){
return 2;
}
int sum=1;
while(n>4){
sum*=3;
n-=3;
}
return sum*n;
}
}