1.整数反转
题目:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
解题思路:
题目比较简单,利用数学取余和整除即可,需要处理溢出的问题。
如何解决溢出问题?
1.将最大最小值整除10后与反转后的结果比对。
public static int inversion(int x) {
int result = 0;
int number;
while (x != 0) {
if (!(result >= Integer.MIN_VALUE / 10 && result <= Integer.MAX_VALUE / 10)) {
return 0;
}
number = x % 10;
x = x / 10;
result = result * 10 + number;
}
return result;
}
2.讲反转后的数值与上一次反转/10进行比对。
public static int inversion2(int x) {
int result = 0;
int number;
while (x != 0) {
number = x % 10;
x = x / 10;
result = result * 10 + number;
if (result != x / 10) {
return 0;
}
}
return result;
}
2.最长公共前缀
题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
解析:
public static String publicPrefix(String[] strs) {
String result = "";
if (null == strs || strs.length == 0) {
return result;
}
if (strs.length == 1) {
return strs[0];
}
String str1, str2;
result = strs[0];
for (int i = 1; i < strs.length; i++) {
str1 = result;
str2 = strs[i];
result = publicStringPrefix(str1, str2);
if ("".equals(result)) {
return result;
}
}
return result;
}
public static String publicStringPrefix(String str1, String str2) {
String result;
int minLength = Math.min(str1.length(), str2.length());
int index = 0;
while (index < minLength && str1.charAt(index) == str2.charAt(index)) {
index ++;
}
return str1.substring(0, index);
}
3.搜索插入位置
题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
示例 4:
输入: nums = [1,3,5,6], target = 0
输出: 0
示例 5:
输入: nums = [1], target = 0
输出: 0
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 为无重复元素的升序排列数组
-104 <= target <= 104
解析:
public int searchInsert(int[] nums, int target) {
int length = nums.length;
int start = 0, end = length -1, mid, res = length;
while (start <= end) {
mid = ((end - start) >> 1) + start;
if (target <= nums[mid]) {
res = mid;
end = mid - 1;
} else {
start = mid + 1;
}
}
return res;
}