NC56 回文数字
1、解题思路
while循环解决,注意边界问题。
2、代码
public boolean isPalindrome(int x) {
if (x < 0) {
return false;
} else if (x == 0) {
return true;
} else {
long val = 0;
int temp = x;
while (temp != 0) {
val = val * 10 + temp % 10;
temp = temp / 10;
}
if (val > Integer.MAX_VALUE) {
return false;
} else {
return val == x;
}
}
}
NC105 二分查找-II
1、解题思路
二分查找,往左逼近就好
2、代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 如果目标值存在返回下标,否则返回 -1
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] nums, int target) {
int ans = -1;
int l = 0;
int r = nums.length - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (nums[mid] == target) {
ans = mid;
r = mid - 1;
} else if (nums[mid] < target) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
}
NC87 丢棋子问题
1、解题思路
当公式记住吧,就和约瑟夫环一样。
2、代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回最差情况下扔棋子的最小次数
* @param n int整型 楼层数
* @param k int整型 棋子数
* @return int整型
*/
private int calc(int time, int k) {
if (time == 1 || k == 1) {
return time + 1;
} else {
return calc(time - 1, k - 1) + calc(time - 1, k);
}
}
public int solve(int n, int k) {
int time = 1;
while (calc(time, k) <= n) {
time++;
}
return time;
}
}