码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode简单题

时间:2020-07-07 13:12:43      阅读:39      评论:0      收藏:0      [点我收藏+]

标签:ref   判断   contain   com   twosum   solution   数字   class   rev   

1.两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum

1.暴力法

class Solution{
    public int[] twoSum1(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] == target - nums[i]) {
                    return new int[]{i, j};
                }
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}

2.两遍哈希表

class Solution {
	public int[] twoSum2(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i], i);
        }
        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
            if (map.containsKey(complement) && map.get(complement) != i) {
                return new int[]{i, map.get(complement)};
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
};

3.一遍哈希表

class Solution {
    public int[] twoSum3(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
            if (map.containsKey(complement) && map.get(complement) != i) {
                return new int[]{i, map.get(complement)};
            }
            map.put(nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solution");
    }
};

7.整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [?231, 231 ? 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer

231- 1 = 2147483647,- 231 = - 2147483648
在正数情况下
如果temp = ans * 10 + pop溢出,则 ans >= INT_MAX/10

class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}
public class Solution {
    public int reverse(int x){
        int ans=0;
        while(x!=0){
            if((ans*10)/10!=ans){
                ans=0;
                break;
            }
            ans = ans*10+x%10;
            x=x/10;
        }
        return ans;
    }
}

9.回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

进阶:

你能不将整数转为字符串来解决这个问题吗?

来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/palindrome-number

public class Solution {
    public boolean isPalindrome(int x){
        StringBuffer sb1 = new StringBuffer(String.valueOf(x));
        String str1 = sb1.toString();
        String str2 = sb1.reverse().toString();
        return str1.equals(str2);
    }
}

StringBuffer的equals是继承自object,只有同一个对象才是true

public class Solution {
    public boolean isPalindrome(int x){
        if(x<0)
            return false;
        int rem = 0,y=0;
        int quo=x;
        while(quo!=0){
            rem = quo%10;
            quo=quo/10;
            y=y*10+rem;
        }
        return y==x;
    }
}

LeetCode简单题

标签:ref   判断   contain   com   twosum   solution   数字   class   rev   

原文地址:https://www.cnblogs.com/aabyss/p/13260093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!