1.求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
/**求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)*/
class Solution {
public int sumNums(int n) {
boolean m = n > 1 && (n += sumNums(n - 1)) > 0;
return n;
}
}//时间复杂度:O(n)
2.2 的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
/*
1.给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
2.如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。 */
class Solution {
public boolean isPowerOfTwo(int n) {
return n > 0 && (n & (n - 1)) == 0;
}
}//时间复杂度:O(1)
3.3的幂
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
/***
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
*/
class Solution {
public boolean isPowerOfThree(int n) {
while (n != 0 && n % 3 == 0) {
n /= 3;
}
return n == 1;
}
}//时间复杂度:O(1)
4.4的幂
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4^x
/**给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x*/
class Solution {
public boolean isPowerOfFour(int n) {
while (n != 0 && n % 4 == 0) {
n /= 4;
}
return n == 1;
}
}//时间复杂度:O(1)
5.n 的第 k 个因子
给你两个正整数 n 和 k 。如果正整数 i 满足 n % i == 0 ,那么我们就说正整数 i 是整数 n 的因子。
考虑整数 n 的所有因子,将它们 升序排列 。请你返回第 k 个因子。如果 n 的因子数少于 k ,请你返回 -1 。
/**给你两个正整数 n 和 k 。
如果正整数 i 满足 n % i == 0 ,那么我们就说正整数 i 是整数 n 的因子。
考虑整数 n 的所有因子,将它们 升序排列 。请你返回第 k 个因子。如果 n 的因子数少于 k ,请你返回 -1 。 */
class Solution {
public int kthFactor(int n, int k) {
int count = 0;
for(int i = 1; i <= n ; i++){
if(n % i == 0){
count++;
if(count == k){
return i;
}
}
}
return -1;
}
}//时间复杂度:O(n)
6.有效的完全平方数
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。
/**给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt */
class Solution {//二分
public boolean isPerfectSquare(int num) {
int low = 1, high = num;
while (low <= high){
int mid = (high - low) / 2 + low;
int temp = num / mid;
if(temp == mid){
return (num % mid == 0);
}else if (temp < mid){
high = mid - 1;
}else {
low = mid + 1;
}
}
return false;
}
}//时间复杂度:O(logn)