力扣题目-JAVA解法

发布时间:2024年01月22日

1、回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。

解题思路:
通过计算 1221 / 1000, 得首位1
通过计算 1221 % 10, 可得末位 1
进行比较
再将 22 取出来继续比较,

class Solution {
    public boolean isPalindrome(int x) {
        {
        //边界判断
        if (x < 0) return false;
        int div = 1;
        //用一个变量记录数字的最高位的值,如12456的div=10000
        while (x / div >= 10) div *= 10;
        while (x > 0) {
            int left = x / div;
            int right = x % 10;
            if (left != right) return false;
            //此步骤的作用是去掉首位和末位
            x = (x % div) / 10;
            //去掉首位和末位之后,少了两位值,最高位的值应该降低100倍。
            div /= 100;
        }
        return true;
    }            
        }
}

2、两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i< nums.length; i++) {
            if(map.containsKey(target - nums[i])) {
                return new int[] {map.get(target-nums[i]),i};
            }
            //为什么不存在则将当前的 (nums[i],i) 存入 map 中?因为map里最初是空的,需要逐渐将数组的值放入map中。
            map.put(nums[i], i);
    }
    throw new IllegalArgumentException("No two sum solution");
 }
}

知识点

1、HashMap

1)基本介绍
HashMap 是一种散列表,用于存储 key-value 键值对的数据结构,一般翻译为“哈希表”,提供平均时间复杂度为 O(1) 的、基于 key 级别的 get/put 等操作。
hashmap的底层是链表+数组,查找和插入的时间复杂度都是O(1)
key不能重复、value值可以重复
2)HashMap的有序性
无序:Java 8之前+Java 8之后元素的数量未达到8个或table数组长度达到64
有序:当hashmap中元素的数量达到8个并且table数组长度达到64的时候,就会将链表转换成红黑树

基本方法:
map.containsKey(key):判断该key在map中是否有key存在。如果存在则返回true。如果不存在则返回false。
map.get(key):返回指定键所映射的值。(为了提高效率和避免出现空指针等异常:尽量使用不可变对象作为Map的key;)
map.put(key,value):添加元素

2、数组

https://blog.csdn.net/ji_meng/article/details/126143070
数组是一种有序的数据结构,用来存储同一类型的集合,也就是说数组包含的变量必须是相同类型!
//动态初始化
数据类型[ ] 数组名 = new 数组名[ ]{ value1,value2,……};
eg. int[ ] arr = new arr[ ] {1,2,3};

//静态初始化 (数组元素的个数和初始化数据的格式是一样的)
数据类型[ ] 数组名 = new 数据类型[ 数组长度 ]
eg. int[ ] array = new int[10];

3、最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。

提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length==0)
        return "";
        String ans = strs[0];
        for(int i=1;i<strs.length;i++){
            //
            int j=0;
            for (;j<ans.length()&&j<strs[i].length();j++){               
                if(ans.charAt(j)!=strs[i].charAt(j))
                    break;
            }
        //这里需要用到j,所以上面定义j不能在for的内部               
        ans = ans.substring(0, j);
        if(ans.equals(""))
            return "";
        }
        return ans;
    }
}

知识点:
length和length()的区别:
length 是 Java 中数组的一个属性,它用于返回数组的长度。
length() 是一个方法,它是 String 类型的一个成员方法。它的目的是返回字符串的内容长度。

文章来源:https://blog.csdn.net/Fighting0429/article/details/134414435
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。