leetcode刷题-----7. 整数反转 - 编程思维

题目: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321 示例 3:输入: 120输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 来源:力扣(LeetCo

leetcode刷题(python解题)-----9.回文数 - 编程思维

题目: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。进

14. 最长公共前缀-----leetcode刷题(python解题) - 编程思维

[TOC] 题目 **编写一个函数来查找字符串数组中的最长公共前缀。** 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。说明: 所有输入只包含小写字母 a-z 。 来源:力扣(LeetCode)

leetcode 1:两数之和 - 编程思维

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 方法1,暴力解法。

20. 有效的括号-----leetcode刷题(python解题) - 编程思维

[TOC] 题目 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false

合并二叉树(python3) - 编程思维

题目要求:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 解决思想:遇到二叉树,首先想到的是递归实现。为了降低空间消耗,两个二叉树合并为一个时,不再新建树。初始给定两个树的当前结点(根结点)t1、t2,

汉明距离(python3) - 编程思维

问题提出:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 2^31。 解题思路:对两数进行二进制求解(使用递归算法),然后从两个二进制的末尾比较每一位是否相等,如果其中一个二进制数全部遍历,判断另一个二进制数是否遍历完,若未遍历完,遍历剩下位数,其中位数如果为1,则汉明距离+1。(因为之前遍历

翻转二叉树(python3) - 编程思维

提出问题:翻转一棵二叉树。(除根结点以外)原始二叉树: 新二叉树: 解题思路:遇见二叉树先想到递归。从最下层的叶子结点开始置换左右子节点,一直置换到到最上层的根结点的左右节点为止。 代码如下( ̄▽ ̄): # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # s

二叉树的最大深度(python3) - 编程思维

问题提出:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。 解决思路:递归法求解。从根结点向下遍历,每遍历到子节点depth+1。 代码实现( ̄▽ ̄): # Definition for a binary tree node. # class TreeNode: # def __init__(self, x):

只出现一次的数字(python3)不使用额外空间 - 编程思维

提出问题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。要求:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 解题思路:使用异或运算解决。异或运算规则:1.相同数字进行异或运算结果为0。2. 0与任何数进行异或运算结果为该数字。比如[4,1,1] 4与1异或为5,5与1异或为4,最终输出4为正确答案。所以算法先设定最终输出

求众数(python3) - 编程思维

提出问题:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。 解决思路:判断众数实则是判断重复元素的个数。遇到重复元素首先考虑字典。字典key值存放数组元素,value存放元素出现次数,如果次数超过n/2,则为答案。 代码如下( ̄▽ ̄): class Solution: def major

合并两个有序链表(python3) - 编程思维

提出问题:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 解决思路:合并链表很简单,设置两个指针遍历两个链表,同时遍历并比较大小,如果1链表的当前节点值较小,将该节点添加到新链表中,1链表遍历指针后移一位,直到两个

将二叉搜索树换为累加树(python3) - 编程思维

提出问题:给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 解决思路:使用新的遍历方式(右子树,根、左子树)遍历整棵树。设置全局变量累加值,再逐一更新节点。 代码如下( ̄▽ ̄): # Definition for a binary tree node. # class Tree

两数相加(python3) - 编程思维

提出问题:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因

无重复字符的最长子串(python3) - 编程思维

提出问题:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例:"abbcc" --> "ab" or "bc"、"abcadef" --> "adef" 解决思路:使用蛮力算法算法很容易实现,但是时间复杂度为O(n^2)。本题可以通过一次遍历完成,比如"abcadef",正常遍历,如果当前遍历字符不在字符串中,将它添加至字符串;当遍历到第2个a时,发现重复,此时截取第

最长回文子串(python3) - 编程思维

问题描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。 解决思路:从字符串的第一个字符开始遍历到最后一个字符,判断该字符到第一个字符的子串是否为回文,设立变量更新最长的回文子串长度。 代码如下^-^: class Solution: def longestPal

电话号码的字母组合(python3) - 编程思维

题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 解题思路:递归实现 代码如下: class So

全排列(python3) - 编程思维

题目描述:给定一个没有重复数字的序列,返回其所有可能的全排列。 示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 解题思路: 代码如下: class Solution: def permute(self, nums: List[int]) -> List[List[int]]: se