LeetCodeのEasy問題を解いていくテスト
11/27
1.two sum
問題文
日本語
整数の配列 nums と整数の target が与えられた場合、合計が target になる二つの数のインデックスを返します。
各入力には必ず一つの解があると仮定しても構いませんが、同じ要素を二度使用することはできません。
答えは任意の順序で返すことができます。
回答例
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = {}
for i in range(len(nums)):
num = nums[i]
complement = target - num
if num in hashmap:
return [hashmap[num],i]
else:
hashmap[complement] = i
class Solution:
def isPalindrome(self, x: int) -> bool:
if str(x) == str(x)[::-1]:
return True
else:
return False
11/28
13. Roman to Integer
問題
ローマ数字は7種類の記号で表される: I、V、X、L、C、D、M。
記号 値
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例えば、2はローマ数字でIIと書き、2つの1を足しただけである。12はXIIと書き、これは単にX+IIである。27はXXVIIと書き、これはXX+V+IIである。
ローマ数字は通常、左から右に大きいものから小さいものへと書く。しかし、4を表す数字はIIIIではない。代わりに4はIVと書く。1が5の前にあるので、それを引くと4となる。同じ原理が数字の9にも当てはまり、IXと書く。引き算が使われる例は6つある:
IをV(5)とX(10)の前に置くと4と9になる。
XをL(50)とC(100)の前に置くと、40と90になる。
CをD(500)とM(1000)の前に置くと、400と900になる。
ローマ数字が与えられたら、それを整数に変換しなさい。
class Solution:
def romanToInt(self, s: str) -> int:
roman={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
number=0
for i in range(len(s)-1):
if roman[s[i]] < roman[s[(i+1)]]:
number-=roman[s[i]]
else:
number+=roman[s[i]]
return number+roman[s[-1]]
- Valid Parentheses
問題
文字 '(', ')', '{', '}', '[', ']' を含む文字列 s が与えられたとき、その入力文字列が有効かどうかを判定する。
入力文字列が有効であるのは、以下の場合である:
開き括弧は、同じ種類の括弧で閉じなければならない。
開き括弧は正しい順序で閉じなければならない。
どの閉じ括弧にも、対応する同じ型の開き括弧がある。
class Solution:
def isValid(self, s: str) -> bool:
opcl = dict(('()','[]','{}'))
stack = []
for idx in s:
if idx in '([{':
stack.append(idx)
elif len(stack) == 0 or idx != opcl[stack.pop()]:
return False
return len(stack) == 0