给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
class Solution(object): def letterCombinations(self, digits): """ :type digits: str :rtype: List[str] """ if digits == '': return [] results = [] my_dict = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl', '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz'} def dfs(k, result): if k == len(digits): results.append(result) return results for i in my_dict[digits[k]]: dfs(k+1, result+i) dfs(0, '') return results
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案.
示例 1:
输入:n = 2 输出:[0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10
思路:bin(),转换为二进制,然后在计算1的个数
# 最开始的复杂版 class Solution(object): def countBits(self, n): """ :type n: int :rtype: List[int] """ res = [] total = 0 for i in range(n+1): s = bin(i)[2:] total = 0 for m in s: total += int(m) res.append(total) return res
# 简化版 class Solution(object): def countBits(self, n): return [bin(i).count('1') for i in range(n + 1)]
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()" 输出:true
思路:将符号进行替换,判断最后的结果是否为空,为空说明全是符合
class Solution(object): def isValid(self, s): while '()' in s or '{}' in s or '[]' in s: s = s.replace('()','') s = s.replace('{}','') s = s.replace('[]','') return s== ''
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点
示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
思路:用栈的方法,将数据全部存放在栈中,然后将N+1个数据取了出来,将需要删除的前一个指针指向下一个的下一个指针,从而删除了第N个数据
class Solution(object): def removeNthFromEnd(self, head, n): a = head b = ListNode(0,head) c = b list1 = list() while c: list1.append(c) c = c.next for i in range(n): list1.pop() stack = list1[-1] stack.next = stack.next.next return b.next
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。
示例 1:
输入:nums = [2,0,2,1,1,0] 输出:[0,0,1,1,2,2] 思路:总共3个颜色,只需要将两个颜色归位,那么剩下一个颜色就是在位置上的,可以使用单指针或者双指针的方法
单指针:
class Solution(object): def sortColors(self, nums): lens = len(nums) r = 0 for i in range(lens): # 从头到尾进行遍历,找出为0的值 if nums[i] == 0: nums[i], nums[r] = nums[r], nums[i] # 将它与r交换,r向后一个 r += 1 for m in range(r, lens): # 在上面遍历之后,前r都为0,所以遍历r以后的数据 if nums[m] == 1: # 为1的时候将它提前,即与r交换 nums[m], nums[r] = nums[r], nums[m] r += 1
双指针:两个指针在两端,分别将0和2的数据放在两端,那么中间必定为1,从而达到排列的效果
class Solution(object): def sortColors(self, nums): lens = len(nums) r = 0 l = lens - 1 n = 0 while n <= l: # 两个指针相遇遍历结束的条件 while n <= l and nums[n] == 2: # 当nums[n]为2的时候,将它置于最后 nums[l], nums[n] = nums[n], nums[l]# 即与l交换 l -= 1 # l向前移动1位 if nums[n] == 0: # 当nums[n]为0的时候,将它置于最前 nums[n], nums[r] = nums[r], nums[n] # 与r的数据进行交换 r += 1 n += 1 return nums