java经典算法-day20
哈喽,各位小伙伴们好,我是喵手。
一、前言
正值金三银四好时节,又到了刷题月。xdm,有空的欢迎一起呀。无论你是挤公交还是坐地铁时间,随时随地皆可刷...你可以不用实操,你只需要看题思考,完后有空coding就好呀。接下来我要开启我的刷题之旅啦,喜欢的小伙伴欢迎点赞关注哦。
二、题目描述:
题目1:
给定一个整数数组nums
和一个整数目标值target
,请你在该数组中找出和为目标值target
的那两个整数,并返回它们的数组下标。
题目2:
给你一个整数x
,如果x
是一个回文整数,返回true
;否则,返回false
。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
三、思路分析:
题1分析:
题2分析:
得知什么是回文数,那我们将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。但是,如果反转后的数字大于int.MAX,我们将遇到整数溢出问题。为了避免数字反转可能导致的溢出问题,为那我们为什么不考虑只反转int 数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。对不对,所以我们 只需要考虑对折数字,将两半进行 整体比较即可。
算法:
由于数字为负数,一定不可能是回文数,所以我们直接pass掉,统一返回false。然后除了 0
以外,所有个位是 0
的数字不可能是回文,因为最高位不等于 0
。所以我们可以对所有大于 0
且个位是 0
的数字也返回 false
。
现在,让我们来考虑如何反转后半部分的数字。先将 数字转为字符串 ,然后将字符串分割为数组,只需要循环数组的一半长度进行判断对应元素是否相等即可。
四、算法实现:
题1AC代码:
public static int[] findNum(int[] nums,int target) {
//记录数组长度。
int n = nums.length;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
//直接进行两数相加
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
return new int[0];
}
题2AC代码:
public static boolean isPalindrome(int num) {
//数字为负数
if (num < 0) {
return false;
}
//个位数是0
int g = num % 10;
if (g == 0 && num != 0) {
return false;
}
//转成字符串
String strNum = String.valueOf(num);
for (int i = 0; i < strNum.length() / 2; i++) {
if (strNum.charAt(i) != strNum.charAt(strNum.length() - 1 - i)) {
return false;
}
}
return true;
}
五、总结:
综上所述,这两道第二道其实我在上几期就已经介绍过了,不知道大家是否记得,然后第一道题就很简单,思路也很多,可以转化为寻数字这样,然后去遍历一个数组找到是否存在这么一个数字即可。
如果你有更好的解题思路或者想法,欢迎评论区留言告诉我哦,喵手感激不尽。
六、文末:
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
wished for you successed !!!
---------------------------------------------------------------------
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
---------------------------------------------------------------------
- 点赞
- 收藏
- 关注作者
评论(0)