尽快写完Math!

时间:2024-09-29 13:37:26

(1)Arranging Coins

尽快写完Math!

解题思路一:这个想法是关于二次方程,得到算术和的公式是sum =(x + 1)* x / 2

所以对于这个问题,如果我们知道和,那么我们可以知道x =(-1 + sqrt(8 * n + 1))/ 2 向下取整。

代码如下:

 public class Solution {
public int arrangeCoins(int n) {
return (int)((-1 + Math.sqrt(1 + 8 * (long)n)) / 2);
}
}

解题思路二:利用给定的n不停的减去1,2…,直至n小于要减去的数字。

代码如下:

 public class Solution {
public int arrangeCoins(int n) {
int result = 0;
int add = 1;
while (n >= add) {
n -= add;
add++;
result++;
}
return result;
}
}

(2)Factorial Trailing Zeroes

尽快写完Math!

解题思路:

因为所有的trailing zero来自因子5 * 2。

但有时一个数字可能有几个5因子,例如,25有两个5因子,125有三个5因子。 在n! 操作,因子2总是充足。 所以我们只计算从1到n的所有数字中的5个因子。

计算5的个数时, 最简单的方法是 SUM(N/5^1,  N/5^2, N/5^3...)

代码一:

 public class Solution {
public int trailingZeroes(int n) {
return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5);
}
}

代码二:

 public class Solution {
public int trailingZeroes(int n) {
if (n < 1) {
return 0;
}
int number = 0;
while (n / 5 != 0) {
n /= 5;
number += n;
}
return number;
}
}

(3)Palindrome Number

尽快写完Math!

解题思路:判断一个数字是否是回文数字,不能像字符串那样一个字符一个字符比较!!!所以将数字反转如果与原数值相同就是回文数字。

代码如下:

 public class Solution {
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
}
return x == reverse(x);
}
public int reverse(int x) {
int rst = 0;
while (x != 0) {
rst = rst * 10 + x % 10;
x /= 10;
}
return rst;
}
}

(4)Rectangle Area

尽快写完Math!

解题思路:

找到重复部分矩形的坐标表示,两个大矩形面积相加减去重叠部分面积即可。

代码如下:

 public class Solution {
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int left = Math.max(A,E), right = Math.max(Math.min(C,G), left);
int bottom = Math.max(B,F), top = Math.max(Math.min(D,H), bottom);
return (C-A)*(D-B) - (right-left)*(top-bottom) + (G-E)*(H-F);
}
}

(5)Reverse Integer

尽快写完Math!

解题思路简单明了。

代码如下:

 public class Solution {
public int reverse(int x) {
int result = 0;
while (x != 0) {
int tail = x % 10;
int newResult = result * 10 + tail;
if ((newResult - tail) / 10 != result) {
return 0;
}//判断是否溢出
result = newResult;
x /= 10;
}
return result;
}
}