Leetcode每天五题II-01

  1. 整数反转

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

class Solution(object):
    def reverse(self, x):
        bound = 2**31-1
        is_pos = x > 0
        res, right = 0, 0
        while x:
            right = x % 10
            #注意这个表达式的含义
            if res > (bound - right)/10
                return 0
            res = 10 * res + right
        return res if is_pos else -res

  1. 字符串转换整数 (atoi)

请你来实现一个 atoi 函数,使其能将字符串转换成整数。

首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

在任何情况下,若函数不能进行有效的转换时,请返回 0。

说明:

假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,qing返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例 1:

输入: “42”
输出: 42

示例 2:

输入: " -42"
输出: -42

解释: 第一个非空白字符为 ‘-’, 它是一个负号。我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

示例 3:

输入: “4193 with words”
输出: 4193

解释:
转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。

示例 4:

输入: “words and 987”
输出: 0

解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。
因此无法执行有效的转换。

示例 5:

输入: “-91283472332”
输出: -2147483648
解释: 数字 “-91283472332” 超过 32 位有符号整数范围。

class Solution {
	public static int myAtoi(String str) {
		if (str == null || "".equals(str) || "".equals(str.trim())) {
			return 0;
		}
		char[] ca = str.trim().toCharArray();
		int i = 0;
		// 判断是否为正
		boolean isPos = ca[0] == '+' || ca[0] != '-';
		int res = 0;
		// 判断第一位是否为符号
		i = (ca[0] == '+' || ca[0] == '-') ? 1 : 0;
		while (i < ca.length && Character.isDigit(ca[i])) {

			int right = ca[i] - '0';
			//加进来之前考虑是否会溢出
			if (res > (Integer.MAX_VALUE - right) / 10) {
				return isPos ? Integer.MAX_VALUE : Integer.MIN_VALUE;
			}
			res = res * 10 + right;
			i++;
		}
		return isPos ? res : -res;
	}
}
  1. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入: [“flower”,“flow”,“flight”]
输出: “fl”

示例 2:

输入: [“dog”,“racecar”,“car”]
输出: “”

解释: 输入不存在公共前缀。

class Solution(object):
    def longestCommonPrefix(self, strs):
        size = len(strs)
        if size <= 1:
            return strs[0] if size == 1 else '' 
        res = ''
        for c in range(len(strs[0])):
            isSame = True
            for i in range(1,len(strs)):
                if c >= len(strs[i]) or strs[i][c] != strs[0][c]:
                    isSame = False
                    break
            if isSame:
                res+=strs[0][c]
            else:
                return res
        return res
  1. 删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

思路:

双指针,nums[0,i]代表无重复,j++直到和nums[i]不等

class Solution(object):
    def removeDuplicates(self, nums):
        i,j = 0,1
        while j<len(nums):
            if nums[i] == nums[j]:
                j+=1
            else:
                i+=1
                nums[i] = nums[j]
        return i+1
  1. 实现strStr()

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

示例 1:

输入: haystack = “hello”, needle = “ll”
输出: 2

示例 2:

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

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

class Solution(object):
    def strStr(self, haystack, needle):
        l = len(needle)
        if not l:
            return l
        for i in range(len(haystack)-l+1):
            if haystack[i:i+l] == needle:
                return i
        return -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值