「算法」整数反转 & 实现 strStr()

▼魔方 西西 提交于 2020-01-06 20:55:03

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

00007 整数反转

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

力扣地址

解题报告

从个位逐个*10逆向追加, 可能有精度损失

public int reverse(int x) {
    int reverse = 0;
    while (x != 0){
        
        int pop = x % 10;
        x = x / 10;
        if(reverse > Integer.MAX_VALUE / 10 || (reverse == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE % 10)){
            reverse = 0;
            break;
        }
        if(reverse < Integer.MIN_VALUE / 10 || (reverse == Integer.MIN_VALUE / 10 && x < Integer.MIN_VALUE % 10)){
            reverse = 0;
            break;
        }
        reverse = reverse * 10 + pop;

    }
    return reverse;
}

转换成字符串翻转

public static int reverseInt(int number){
    String source = String.valueOf(number);
    String result = "";
    for(int i=0; i<source.length(); i++){
        result = source.charAt(i) + result;
    }
    return Integer.parseInt(result);
}

小猿刷题

00028 实现 strStr()

题目描述

实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

示例 1:

输入: haystack = "hello", needle = "ll"
输出: 2

示例 2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

力扣地址

解题报告

  • 采用双指针

算法实现

public static int strStr(String haystack, String needle) {
    if(null == needle || needle.length() == 0){
        return 0;
    }
    if(null == haystack ||  haystack.length() == 0 || needle.length() > haystack.length()){
        return -1;
    }
    for(int i = 0; i < haystack.length(); i++){
        // 前缀对齐
        if (haystack.charAt(i) == needle.charAt(0) && i + needle.length() <= haystack.length()) {
            String substr = haystack.substring(i, i + needle.length());
            if(substr.equals(needle)){
                return i;
            }
        }
    }
    return -1;
}

小猿刷题

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!