Thief of Wealth

leetcode.com/problems/string-to-integer-atoi/

 

String to Integer (atoi) - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

핵심아이디어

문제의 조건을 구현하기만 하면된다.

1. 앞 공백은 무시한다.

=> trim(' ')을 사용

2. -, +는 음,양수를 뜻한다. 아무 sign이 없으면 양수이다.

3. 숫자가 아닌 문자가 나오면 그 뒤의 문자열은 무시한다. (첫번째가 -,+인 경우는 당연히 제외겠지?), (처음부터 -,+아닌 문자면 0출력)

=> 문자열을 1자리씩 순회하되, 숫자가 아닌 문자로 판단되면 그 이전까지의 index를 저장하고 종료한다. (some사용. forEach는 break가 안되기 때문.)

이때 처음에 -,+가 있는 것은 허용하여 구현한다.

4. 문자열을 출력하되 앞이 0으로 시작하면 0을 제거한다.

=>trim('0')를 사용

5. 숫자의 범위는 [-2^31, 2^31-1]이고 이 범위를 벗어나는 경우 경계값으로 출력한다.

ex) -9978654365215376217는 -2^31으로, 937893648923647836는 2^31-1으로 출력

 

/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function (s) {
	let isNegative = false;
	let digitRange = 0;
	s = s.trim(' ');
	if (Array.from(s)[0] === '-') isNegative = true;
	Array.from(s).some((v, i) => {
		
		if(v === '-' || v === '+'){
			if(i!==0){
				return true;
			}
		}
		
		if ('0' <= v || v <= '9') {
			digitRange = i;
		} else {
			return true;
		}
		return false;
	});

	s = s.slice(0, digitRange + 1).trim('0');
	s = parseInt(s, 10);
	s = Math.max(-1 * 2 ** 31, s);
	s = Math.min(2 ** 31 - 1, s);
	return s ? s : 0;
};

 

 

 

profile on loading

Loading...