一 整数反转
给出一个 32 位 的有符号整数,你需要将这个整数中每位上的数字进行反转
示例 1
输入 : 123
输出 : 321
示例 2
输入 : -123
输出 : -321
示例 3
输入 : 120
输出 : 21
public class Test_01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
int a = s.nextInt();
System.out.println(Reversal(a));
}
public static int Reversal(int a) {
int result = 0;
int x = 1;
int count = 1;
int temp = a;
if (a >= 0) {
// 判断输入的位数
for (int i = 0; temp > 10; i++) {
temp /= 10;
count++;
}
int[] arr = new int[count];
for (int i = 0; i < arr.length; i++) {
arr[i] = a % 10;
a /= 10;
}
// for(int ele:arr){
// System.out.println(ele);
// }
for (int i = 0; i < arr.length; i++) {
result += arr[arr.length - i - 1] * x;
x *= 10;
}
return result;
} else {
temp = -a;
for (int i = 0; temp > 10; i++) {
temp /= 10;
count++;
}
int[] arr = new int[count];
for (int i = 0; i < arr.length; i++) {
arr[i] = a % 10;
a /= 10;
}
// for(int ele:arr){
// System.out.println(ele);
// }
for (int i = 0; i < arr.length; i++) {
result += arr[arr.length - i - 1] * x;
x *= 10;
}
return result;
}
}
}
二 回文数
判断一个正数是否是回文数,回文数是指正序(从左到右) 和 倒叙(从右到左) 读 都是一样的整数
示例 1
输入 : 121
输出 : true
示例 2
输入 : -121
输出 : false
解释 : 从左到右是 -121.从右到左是 121- 因此不是回文数
示例 3
输入 : 10
输出 : false
解释 : 从右到左为 01 因此不是回文数
public class Test_02 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int a = s.nextInt();
System.out.println(HunWen(a));
}
public static boolean HunWen(int a) {
int temp = a;
int count = 1;
if (a >= 0) {
// 判断输入的位数
for (int i = 0; temp > 10; i++) {
temp /= 10;
count++;
}
int[] arr = new int[count];
for (int i = 0; i < arr.length; i++) {
arr[i] = a % 10;
a /= 10;
}
for (int ele : arr) {
System.out.println(ele);
}
for (int i = 0; i < arr.length - 1 - i; i++) {
if (arr[i] != arr[arr.length - 1 - i]) {
return false;
}
continue;
}
return true;
} else {
return false;
}
}
}
三 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度
示例 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 class Test_03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums={0,0,1,1,1,2,2,3,3,4};
int[] result=delete(nums);
}
public static int[] delete(int[] arr){
int a=arr[0];
int count=0;
for(int i=0;i<arr.length;i++){
if(a!=arr[i]){
count++;
arr[count]=arr[i];
a=arr[i];
}
}
for(int ele:arr){
System.out.println(ele);
}
return arr;
}
}
四 移除元素
给定一个数组 nums 和一个值 val 你需要原地移除所有数值等于val的元素,返回移除后数组的新长度,不要使用额外的数组空间
元素的顺序可以改变,你不需要考虑数组中超出新长度后面的元素
示例 1
给定 nums = {3,2,2,3}; val = 3;
函数应该返回新的长度 2 , 并且 nums中的前两个元素均为 2
你不需要考虑数组中超出新长度后面的元素
public class Test_04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {3,2,2,3};
int val = 3;
int result=remote(nums, val);
System.out.println("新的长度"+result);
}
public static int remote(int[] arr,int val){
int count=0;
for(int i=0;i<arr.length;i++){
if(arr[i]!=val){
arr[count]=arr[i];
count ++;
}
}
for(int ele:arr){
System.out.println(ele);
}
return count;
}
}
五 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引,如果目标值不存在数组中,返回他将会被按顺序插入的位置
你可以假设数组中无重复元素
示例 1
输入 : {1,3,5,6} , 5
输出 : 2
示例 2
输入 : {1,3,5,6} , 4
输出 : 2
public class Test_05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr={1,3,5,6};
int result=location(arr, 5);
System.out.println(result);
}
public static int location(int[] arr,int a){
int start=0;
int end=arr.length-1;
int mid=(start+end)/2;
for(;start<end;){
if(a==arr[mid]){
System.out.println("所在数组位置为"+mid);
return mid;
}
if(a<mid){
end=mid-1;
mid=(start+end)/2;
}
if(a>mid){
start=mid+1;
mid=(start+end)/2;
}
}
System.out.println(a+"不在源数组中,插入后位置为"+(mid+1));
return mid+1;
}
}
六 最后一个单词的长度
给定一个仅包括大小写字母和空格 ‘ ’ 的字符串 , 返回其最后一个单词的长度
如果不存在最后一个单词,请返回0
说明 : 一个单词是指由字母组成,但不包括任何空格的字符串
示例 :
输入 : “Hello World”
输出 : 5
public class Test_11 {
public static void main(String[] args) {
String str="Hello World";
int l=Length(str);
System.out.println(l);
}
public static int Length(String str){
String[] s=str.split(" ");
if(str==null | str.trim().length()==0){
return 0;
}
for(String ele:s){
System.out.println(ele);
}
String lastWord=s[s.length-1];
return lastWord.length();
}
}
七 合并两个有序数组
给定两个有序整数数组,nums1 和nums2 ,将nums2合并到nums1中,使得nums1成为一个有序数组
说明 : 初始化 nums1 和 nums2 的元素数量分别为 m 和 n
你可以假设nums1有足够的空间(空间大小大于或等于 m+n),来保存nums2中的元素
示例 :
输入 : nums1 = {1,2,3,0,0,0} m = 3;
nums2 = {2,5,6} n=3
输出 : {1,2,2,3,5,6}
public class Test_12 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums1 = {1,2,3,0,0,0} ;
int[] nums2 = {2,5,6};
int[] resultNum=result(nums1, nums2);
for(int ele:resultNum){
System.out.println(ele);
}
}
public static int[] result(int[] nums1,int[] nums2){
int count=0;
for(int i=nums2.length;i<nums1.length;i++){
nums1[i]=nums2[count];
count++;
}
Arrays.sort(nums1);
return nums1;
}
}
八 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写
说明 : 本题中,我们将空字符串定义为有效的回文串,和回文数一样,正读反读一样
示例 1
输入 : “A man , a plan , a canal : Panama”
输出 : true
示例 2
输入 : “race a car”
输出 : false
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="A man , a plan , a canal : Panama";
boolean result= judge(str);
System.out.println(result);
}
public static boolean judge(String str){
str=str.toLowerCase();
char[] chars=str.toCharArray();
int count=0;
for(int i=0;i<chars.length;i++){
if(chars[i]>=48 && chars[i]<=57 || chars[i]>=65 && chars[i]<=90 ||chars[i]>=97 && chars[i]<= 122 ){
count++;
}
}
System.out.println("字符串总长度为:"+count);
char[] chars2=new char[count];
int newlength=0;
for(int i=0;i<chars.length;i++){
if(chars[i]>=48 && chars[i]<=57 || chars[i]>=65 && chars[i]<=90 ||chars[i]>=97 && chars[i]<= 122 ){
chars2[newlength]=chars[i];
newlength++;
}
}
for(int i=0;i<count;i++){
if(chars2[i]!=chars2[count-1-i]){
return false;
}
}
// for(char ele:chars2){
// System.out.print(ele);
// }
return true;
}
}
九 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找出那个只出现一次的元素
说明 : 你可以不使用额外空间来实现吗?
示例 1
输入 : {2,2,1}
输出 : 1
示例 2
输入 : {4,1,2,1,2}
输出 : 4
public class Test_14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums={4,1,2,1,2};
System.out.println(result(nums));
}
public static int result(int[] arr){
int a=0;
for(int i=0;i<arr.length;i++){
a=a^arr[i];
}
return a;
}
}
十 数组最后位加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一,
最高位数字存放在数组的首位,数组中每个元素只存储一个数字
你可以假设除了整数0之外,这个整数不会以 零 开头
示例 1
输入 : {1,2,3}
输出 : {1,2,4}
解释 : 输入数组表示数字 123.
示例 2
输入 : {4,3,2,1}
输出 : {4,3,2,2}
解释 : 输入数组表示数字 4321.
public class Test_15 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums= {4,3,2,9};
int [] result=andOne(nums);
for(int ele:result){
System.out.println(ele);
}
}
public static int[] andOne(int[] arr){
for(int i=arr.length-1;i>=0;i--){
if(arr[i]!=9){
arr[i]=arr[i]+1;
return arr;
}
arr[i]=0;
}
int [] arr2=new int[arr.length+1];
arr2[0]=1;
return arr2;
}
}