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

leetcode 1

时间:2018-09-19 00:37:23      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:有符号   tin   32位   一个   题目   style   ring   twosum   符号   

1.题目:

给定一个整数数组,返回两个数字的索引,使它们相加到特定目标。

您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。

鉴于nums = [2,7,11,15],target = 9,

因为nums [ 0 ] + nums [ 1 ] = 2 + 7 = 9,
返回[ 01 ]。
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] a = new int[2];
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    a[0]=i;
                    a[1]=j;
                   
                }
                    
                
            }
            
        }
        return a;
    }
}

思路:双循环 对数组中的值全部进行判断,返回索引。

优化思路:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        if(nums==null || nums.length<2)
        return new int[]{0,0};
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i=0; i<nums.length; i++){
            if(map.containsKey(nums[i])){
                return new int[]{map.get(nums[i]), i};
            }
            else {
                map.put(target-nums[i], i);
            }
        }
        return new int[]{0,0};
    }
}

使用map,  使用target减去当前数组值,存储差值和当前数组值的索引,然后判断差值是否在数组内存在,如果存在,返回索引。节省时间复杂度。

题目2:给定32位有符号整数,整数的反向数字。

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;
    
    }
}

思路:不断取余数,然后对上一次结果和这次余数进行拼接。  如果结果大于或小于整数最大值。

 

题目3:确定整数是否是回文。当它向前读取向后时,整数是回文。

class Solution {
    public boolean isPalindrome(int x) {
         if(x<0)
            return false;
        int num = 0;
        int a = x;
  
        while(x!=0){
           num = num *10+x%10;
        x=x/10;
        }
       if(num!=a) return false;
       return true;
    }
}

思路: 使用反转数的思路 将数先反转,然后判断是否与原数相等。

优化:循环条件真判断到数值数的1半。即x>num.或者

 String string = Integer.toString(x);
        char[] chars = new char[string.length()];
    
        for (int i = 0; i < string.length(); i++){
            if (string.charAt(i) != string.charAt(string.length()-i-1)){
                return false;
            }
        }
        return true;

 

将其存为String数组,然后循环使用Sting数组的charAt判断是否相等。

leetcode 1

标签:有符号   tin   32位   一个   题目   style   ring   twosum   符号   

原文地址:https://www.cnblogs.com/guoyunhao/p/9672240.html

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