提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
没看出来跟 两数之和 I 有什么区别
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。
以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。
示例 1:
输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
示例 2:
输入:numbers = [2,3,4], target = 6
输出:[1,3]
解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。
示例 3:
输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers 按 非递减顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案
class Solution:def twoSum(self, numbers: List[int], target: int) -> List[int]:#两数之和,首先想到双指针法left=0 #左指针指向首元素right=len(numbers)-1 #右指针指向尾元素ssum=numbers[left]+numbers[right] while(ssum != target):if(ssum
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个 。
对于所有给定的输入,保证 答案字符串的长度小于 104 。
示例 1:
输入:numerator = 1, denominator = 2
输出:“0.5”
示例 2:
输入:numerator = 2, denominator = 1
输出:“2”
示例 3:
输入:numerator = 4, denominator = 333
输出:“0.(012)”
-231 <= numerator, denominator <= 231 - 1
denominator != 0
此题模拟竖式除法,列竖式的具体过程不再赘述。对于循环节,第一次出现重复的余数即视为循环出现(因为相同的余数再怎么除也是相同的结果)。注意此处为了便于确定循环节的位置,需要建立一个对应余数和位置的哈希表。为了方便,首先判断符号,然后将可能的结果分为三种,一是可以整除的,二是有限小数,三是无限循环小数,二和三放一起
class Solution:def fractionToDecimal(self, numerator: int, denominator: int) -> str:#可以整除if(numerator%denominator == 0):return str(int(numerator/denominator))#有小数if(numerator*denominator<0):#先看符号result='-'else:result=''numerator,denominator=abs(numerator),abs(denominator)#变正数result=result+str(numerator//denominator)+'.'#先除出来整数remainder=numerator%denominator #余数一定不为0count=len(result) #记载小数的位置temp={remainder:count} #加入哈希表remainder*=10#处理小数while(1):result+=str(remainder//denominator)remainder%=denominatorif(remainder==0): #余数为0,整除了breakif(remainder in temp): #余数重复了,给循环节加上括号即可flag=temp[remainder] #循环节开始的地方result=result[:flag]+'('+result[flag:]+')'breakcount+=1temp[remainder]=count remainder*=10return result
下一篇:127. 单词接龙