LeetCode-8
String to Integer (atoi) : Implement the myAtoi(string s) function, which converts a string to a 32-bit signed integer (similar to C/C++'s atoi function).
note : integers less than -231 should be clamped to -231, and integers greater than 231 - 1 should be clamped to 231 - 1.
Answer
:::python
class Solution:
def myAtoi(self, s: str) -> int:
left = 0
k = ''
p = ''
for l in s.split(' '):
if l=='':
continue
elif l.isalpha():
break
left = 0
while left < len(l):
if l[left].isdigit():
k += l[left]
elif (l[left] in ['+','-']) and (left==0):
p += l[left]
else:
break
left+=1
if k+p != '':
break
if k=='':
return 0
k = int(p+k)
if k >= 231-1:
return 231-1
elif k <= -231:
return -231
else:
return k
Result : 42ms Memory: 13.9mb
String to Integer (atoi)
"String to Integer (atoi)"λ λ¬Έμμ΄μ μ μλ‘ λ³ννλ ν¨μμ λλ€. μ΄λ ν¨μλ 맀κ°λ³μλ‘ λ°μ λ¬Έμμ΄μ 맨 μμ μλ 곡백μ 무μνκ³ , κ·Έ λ€μλΆν° μ«μκ° λμ¬ λκΉμ§λ§ λ³νν©λλ€. μ΄νμλ μ«μ μ΄μΈμ κ°μ΄ λμ€λ©΄ λ³νμ λ©μΆκ³ κ·Έμ κΉμ§ λ³νν κ°μ λ°νν©λλ€.
μμ
λ€μμ "42"λΌλ λ¬Έμμ΄μ μ μλ‘ λ³ννλ μμμ λλ€.
μ λ ₯: "42"
μΆλ ₯: 42
ꡬν
"String to Integer (atoi)" ν¨μλ₯Ό ꡬνν λμλ λ€μκ³Ό κ°μ μ μ°¨λ₯Ό λ°λ¦ λλ€.
- μ λ ₯κ°μΌλ‘ λ°μ λ¬Έμμ΄ sμ 맨 μμ μλ 곡백μ μ κ±°ν©λλ€.
- μ λ ₯κ°μΌλ‘ λ°μ λ¬Έμμ΄ sκ° μμ, μμμΈμ§ νμΈν©λλ€. μ΄νμ λ³νν μ«μκ° λμ€κΈ° μ κΉμ§ λ¬Έμμ΄ sμ 맨 μμ μλ λΆνΈλ₯Ό 체ν¬ν©λλ€.
- λ³νμ΄ κ°λ₯ν μ«μκΉμ§ λ¬Έμμ΄ sλ₯Ό νμν©λλ€. μ΄λ λ³νν μ«μκ° λ§¨μμμλμ€λ κ²½μ°μλ λΆνΈκ° μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ 2λ²μμ 체ν¬ν λΆνΈλ₯Ό μ¬μ©ν©λλ€.
- λ³νλ μ«μμ λΆνΈλ₯Ό κ³±νμ¬ μ΅μ’ κ°μ λ°νν©λλ€.
μ£Όμμ
"String to Integer (atoi)" ν¨μλ₯Ό ꡬνν λ λ€μκ³Ό κ°μ μ£Όμμ μ΄ μμ΅λλ€.
- μ λ ₯κ°μΌλ‘ λ°μ λ¬Έμμ΄ sκ° λΉ λ¬Έμμ΄μΈ κ²½μ°λ μ«μκ° μλ λ€λ₯Έ λ¬Έμμ΄μ μ λ ₯ν κ²½μ°μλ 0μ λ°νν©λλ€.
- λ³νλ μ«μκ° intμ λ²μλ₯Ό λ²μ΄λλ κ²½μ°μλ μμΈλ₯Ό μ²λ¦¬ν΄μΌ ν©λλ€.
class Solution {
public int myAtoi(String s) {
if(s == null || s.length() == 0) return 0;
int idx = 0;
int sign = 1;
int result = 0;
// 곡백 μ κ±°
while(idx < s.length() && s.charAt(idx) == ' ') idx++;
// λΆνΈ 체ν¬
if(idx < s.length() && (s.charAt(idx) == '+' || s.charAt(idx) == '-')){
sign = s.charAt(idx) == '+' ? 1 : -1;
idx++;
}
// λ³ν κ°λ₯ν μ«μκΉμ§ νμ
while(idx < s.length() && Character.isDigit(s.charAt(idx))){
int digit = s.charAt(idx) - '0';
// int λ²μ λμ΄κ°λμ§ μ²΄ν¬
if(result > Integer.MAX_VALUE/10 || (result == Integer.MAX_VALUE/10 && digit > 7) ){
return sign == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
result = result * 10 + digit;
idx++;
}
return sign * result;
}
}
'π’ One step' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[leetcode-12] Integer to Roman (0) | 2023.04.21 |
---|---|
[leetcode-10] Regular Expression Matching (0) | 2023.04.20 |
[leetcode-6] Zigzag Conversion (0) | 2023.04.18 |
[leetcode-7] Reverse Integer (0) | 2023.04.16 |
[leetcode-9] Palindrome Number (0) | 2023.04.15 |