1 正数反转(??)
给出一个 32 位 的有符号整数,你需要将这个整数中每位上的数字进行反转
示例 1
输入 : 123
输出 : 321
示例 2
输入 : -123
输出 : -321
示例 3
输入 : 120
输出 : 21
public static void main(String[] args) {
long a=reverse(-2356);
System.out.println(a);
}
public static long reverse(long x) {
long remain;
long temp=0;
//只要数据不是0,就可以直接进入计算,0的翻转还是0
while(x!=0){
remain=x%10;
x=x/10;
//Integer.MAX_VALUE表示int数据类型的最大取值数:2 147 483 647
//Integer.MIN_VALUE表示int数据类型的最小取值数:-2 147 483 648
//判断数据是否在正数的范围内
if(temp>Integer.MAX_VALUE/10 || (temp == Integer.MAX_VALUE && remain>7))return 0;
//判断数据是否超出了负数范围
if(temp<Integer.MIN_VALUE/10 || (temp == Integer.MIN_VALUE && remain<-8))return 0;
//在范围内,则进行颠倒计算
temp=temp*10+remain;
}
return temp;
}
2 回文数
判断一个正数是否是回文数,回文数是指正序(从左到右) 和 倒叙(从右到左) 读 都是一样的整数
示例 1
输入 : 121
输出 : true
示例 2
输入 : -121
输出 : false
解释 : 从左到右是 -121.从右到左是 121- 因此不是回文数
示例 3
输入 : 10
输出 : false
解释 : 从右到左为 01 因此不是回文数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个数: ");
int num = sc.nextInt();
int reverseNum = 0, initialNum, remainder = 0;
// 将输入的值赋给initialNum
initialNum = num;
// 每个循环num的数降位
for (; num != 0; num /= 10) {
// reverseNum自己全部的值都升位给num%10的数让位
remainder = num % 10;
reverseNum = (reverseNum * 10) + remainder;
}
// 判断输入值等不等于reverseNum的值
if (initialNum == reverseNum) {
System.out.println("数字 " + initialNum + " 是回文数");
}
else {
System.out.println("数字" + initialNum + "不是一个回文数");
}
}
3 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度
示例 1
给定数组 nums ={1,1,2};
函数应该返回新的长度 2,并且原数组 nums的前两个元素被修改为 1,2
你不需要考虑数组中超出新长度后面的元素
示例 2
给定 nums={0,0,1,1,1,2,2,3,3,4};
函数应该返回新的长度 5 ,并原数组 nums的前5个元素被修改为 0,1,2,3,4
你不需要考虑数组中超出新长度后面的元素
public static void main(String[] args) {
int[] arr = { 1,1,1,2,3,3,4,5,6,6 };
test(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
// 通过比较数组中相邻的两个数据,不等的话将第一个数据传给数组的第一位,最后输出数组的长度为x+1
public static int test(int[] arr) {
int x=1;
for (int j = 0; j < arr.length-1; j++) {
if (arr[j] != arr[j+1]) {
arr[x]=arr[j+1];
x++;
}
}
System.out.println("新数组的长度为"+x);
return 0;
}
4 移除元素
给定一个数组 nums 和一个值 val 你需要原地移除所有数值等于val的元素,返回移除后数组的新长度,不要使用额外的数组空间
元素的顺序可以改变,你不需要考虑数组中超出新长度后面的元素
示例 1
给定 nums = {3,2,2,3}; val = 3;
函数应该返回新的长度 2 , 并且 nums中的前两个元素均为 2
你不需要考虑数组中超出新长度后面的元素
public static void main(String[] args) {
int[] nums = { 1, 1, 1, 2, 3, 3, 4, 5, 6, 6 };
int val = 3;
test(nums, val);
}
// 用val与nums中每一个元素做对比,当不等时将数据放到第一位上
public static int test(int[] nums, int val) {
int y = 0;
for (int i = 0; i < nums.length-1; i++) {
if ((val) != nums[i]) {
nums[y] = nums[i];
y++;
}
}
System.out.println("新数组的长度为" + y);
return 0;
}
5 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引,如果目标值不存在数组中,返回他将会被按顺序插入的位置
你可以假设数组中无重复元素
示例 1
输入 : {1,3,5,6} , 5
输出 : 2
示例 2
输入 : {1,3,5,6} , 4
输出 : 2
public static void main(String[] args) {
int[] arr = { 1,2,3,5,6,7,8,9 };
int val = 4;
test(arr, val);
}
//将val与数组中的每一个元素作比较,相等时输出此次循环运行次数并输出
//如没有相等的数据,则将数组中第一个大于val的值的地址位置 + 1, 输出
public static int test(int[] arr,int val) {
int x=0;
for (int i = 0; i < arr.length-1; i++) {
if (val==arr[i]) {
break;
}else {
if (val<arr[i]) {
break;
}
}
x++;
}
System.out.println(val+"在数组中的位置是"+ x);
return 0;
}