文章目录
一、前言
九日集训第二天。
二、题目
1)剑指 Offer 64. 求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
1.a)题目分析:
本题不可以使用常见的 乘除法、for之类的办法,我们可以运用递归,来达到解题的目的。
1.b)代码:
class Solution {
public int sumNums(int n) {
boolean flag = n > 0 && (n += sumNums(n - 1)) > 0;
return n;
}
}
2)231. 2 的幂
给你一个整数 n n n,请你判断该整数是否是 2 2 2的幂次方。如果是,返回
true
;否则,返回false
。如果存在一个整数 x 使得n == 2x
,则认为 n n n是 2 2 2的幂次方。
2.a)题目分析:
如果这个整数
n
n
n小于等于0,则
n
n
n肯定不是2的幂次方,通过枚举所有
2
2
2的幂次方,与
n
n
n进行比较,就能判断。
要注意整型的
32
32
32上线。
2.b)代码:
class Solution {
public boolean isPowerOfTwo(int n) {
int k=1;
if (n<=0){
return false;
}
if(n==1){
return true;
}
for(int i =0;i<31;i++){
k*=2;
if(k==n){
return true;
}
}
return false;
}
}
3)326. 3 的幂
给定一个整数,写一个函数来判断它是否是 3 3 3 的幂次方。如果是,返回
true
;否则,返回false
。整数 n n n是 3 3 3 的幂次方需满足:存在整数 x x x 使得n == 3x
。
3.a)题目分析:
本题在上题上稍作改变即可,要注意整型的上线
3.b)代码:
class Solution {
public boolean isPowerOfThree(int n) {
int k=1;
if (n<=0){
return false;
}
if(n==1){
return true;
}
for(int i =0;i<21;i++){
k*=3;
if(k==n){
return true;
}
}
return false;
}
}
4)342. 4的幂
给定一个整数,写一个函数来判断它是否是 4 4 4 的幂次方。如果是,返回
true
;否则,返回false
。整数 n n n 是 4 4 4 的幂次方需满足:存在整数 x x x 使得n == 4x
。
4.a)题目分析:
本题依然同理
4.b)代码:
class Solution {
public boolean isPowerOfFour(int n) {
int k=1;
if (n<=0){
return false;
}
if(n==1){
return true;
}
for(int i =0;i<16;i++){
k*=4;
if(k==n){
return true;
}
}
return false;
}
}
5)1492. n 的第 k 个因子
给你两个正整数 n n n 和 k k k 。如果正整数 i i i 满足
n % i == 0
,那么我们就说正整数 i i i 是整数 n n n 的因子。考虑整数 n n n 的所有因子,将它们 升序排列 。请你返回第 k k k个因子。如果 n n n 的因子数少于 k k k ,请你返回 − 1 -1 −1 。
5.a)题目分析:
通过循环来枚举所有满足 n % i == 0
的正整数
i
i
i,并统计这是第几个因子,
返回第
k
k
k个因子。
5.b)代码:
class Solution {
public int kthFactor(int n, int k) {
int cnt=0;
for(int i=1;i<=n;i++){
if(n % i== 0){
cnt++;
if(cnt==k){
return i;
}
}
}
return -1;
}
}
6)367. 有效的完全平方数
给定一个 正整数 n u m num num ,编写一个函数,如果 n u m num num 是一个完全平方数,则返回
true
,否则返回false
。进阶:不要 使用任何内置的库函数,如sqrt
。
6.a)题目分析:
本题可以用暴力,枚举所有 x x x的平方数 n n n,将 n n n与 n u m num num进行比较即可。
6.b)代码:
class Solution {
public boolean isPerfectSquare(int num) {
long x = 1, n = 1;
while (n <= num) {
if (n == num) {
return true;
}
++x;
n = x * x;
}
return false;
}
}
三、做题记录
四、今日总结
今日循环的题目要注意循环结束的条件。