1. 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, Ϊ -121 。 从右向左读, Ϊ 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, Ϊ 01 。因此它不是一个回文数。
# 思路:将整数转化为字符串,用字符串切片的方法,步长取-1,将字符串反转,与原数比较 def func(x): if x == int(str(x)[::-1]): return True else: return False res = func(121)
2. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
# 思路:用目标值target减去数组中的一个值,比较 得到的值是否在数组nums中,若在就返回这两个数的索引值 def two_sum(nums, target): for i in range(len(nums)): # for 循环遍历,取出nums的索引值 sub = target - nums[i] if sub in nums: res = nums.index(sub) # 获取另一个值的索引 if res != i: return [i, res]
3. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 2**31, 2**31 1]。 请根据这个假设,如果反转后整数溢出那么就返回 0。
3. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 2**31, 2**31 1]。 请根据这个假设,如果反转后整数溢出那么就返回 0。
# 思路:先转化为列表反转,用reverse方法。负整数有负号,先判断 def int_reverse(x): lt = list(str(x)) if lt[0] == '-': lt.reverse() lt2 = lt[0:len(lt) - 1] # 负整数反转之后,不取"-" res = -int(''.join(lt2)) if res < -2 ** 31: return 0 else: return res else: lt.reverse() lt2 = lt[0:len(lt)] res = int(''.join(lt2)) if res > 2 ** 31 - 1: return 0 else: return res
4. 按奇偶排序数组 给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。 你可以返回满足此条件的任何数组作为答案。 示例: 输入:[3,1,2,4] 输出:[2,4,3,1] 输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。 提示: 1 <= A.length <= 5000 0 <= A[i] <= 5000
def sort_A(A): lt1 = [] lt2 = [] # 定义两个列表,分别接收奇数和偶数 for i in A: if i % 2 == 0: lt1.append(i) else: lt2.append(i) return lt1 + lt2
''' 5. IP地址无效化 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."。 示例 1: 输入:address = "1.1.1.1" 输出:"1[.]1[.]1[.]1" 示例 2: 输入:address = "255.100.50.0" 输出:"255[.]100[.]50[.]0" 提示: 给出的 address 是一个有效的 IPv4 地址 ''' def ipaddr(s): s2 = s.split('.') res = '[.]'.join(s2) return res
6.宝石与石头 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。 示例 1: 输入: J = "aA", S = "aAAbbbb" 输出: 3 示例 2: 输入: J = "z", S = "ZZ" 输出: 0 注意: S 和 J 最多含有50个字母。 J 中的字符不重复。 ''' def func(J, S): sum = 0 for i in J: sum += S.count(i) return sum
''' 7.有序数组的平方 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100] 示例 2: 输入:[-7,-3,2,3,11] 输出:[4,9,9,49,121] 提示: 1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A 已按非递减顺序排序。 ''' def sorted_square(A): lt = [] for i in A: lt.append(i ** 2) lt.sort() return lt
''' 8. 反转字符串中的单词 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc" 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 ''' # 思路:转换为列表,遍历取出单词反转 def sorted_str(s): lt = [] s_list = s.split(' ') for i in s_list: lt.append(i[::-1]) return ' '.join(lt)
''' 9. 按奇偶排序数组 给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。 你可以返回任何满足上述条件的数组作为答案。 示例: 输入:[4,2,5,7] 输出:[4,5,2,7] 解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。 提示: 2 <= A.length <= 20000 A.length % 2 == 0 0 <= A[i] <= 1000 ''' def func3(A): lt, lt1, lt2 = [], [], [] for i in A: if i % 2 == 0: lt1.append(i) else: lt2.append(i) # lt1 存储偶数,lt2 存储奇数 while lt1 and lt2: lt.append(lt1.pop()) lt.append(lt2.pop()) # pop()默认删除最后一个,返回删除的数 return lt
''' 10. 各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-digits 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ''' def add_digit(num): if num < 9: return num elif num == 9: return 9 else: return num % 9
''' 11. 存在重复元素 给定一个整数数组,判断是否存在重复元素。 如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false 示例 3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/contains-duplicate 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ''' # 思路:用集合set,重复元素删除,比较原数组和集合的长度 def func4(nums): if len(nums) == len(set(nums)): return True else: return False func4([1,1,1,3,3,4,3,2,4,2])
''' 12. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/single-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ''' def func5(nums): lt = [] for i in nums: if i not in lt: lt.append(i) else: lt.remove(i) return lt[0] func5([4,1,2,1,2])
''' 13. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。 注意这五个元素可为任意顺序。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝 int len = removeElement(nums, val); // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); } 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-element 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ''' def remove_elemnet(nums, val): i = 0 # i为数组长度 for j in range(0, len(nums)): if nums[j] != val: nums[i] = nums[j] i += 1 return i
来源:博客园
作者:SetCreed
链接:https://www.cnblogs.com/setcreed/p/11484482.html