leetcode 7 정수 반전 (정수 디지털 작업 에 대한 간결 한 알고리즘)

2583 단어
[제목 설명]
32 비트 의 기호 정 수 를 보 여 주 려 면 이 정수 중의 모든 숫자 를 반전 시 켜 야 한다.
예시 1:
입력: 123 출력: 321 예시 2:
입력: - 123 출력: - 321 예시 3:
입력: 120 출력: 21 주의:
만약 에 우리 의 환경 이 32 비트 의 기호 정수 만 저장 할 수 있다 고 가정 하면 그 수치 범 위 는? [−231,  231 − 1]。이 가설 에 따 르 면 반전 후 정수 가 넘 치면 0 으로 돌아 갑 니 다.
[문제 풀이]
플러스 와 마이너스 가 뒤 바 뀌 어 새로운 숫자 에 존재 하 므 로, 원래 의 숫자 마지막 자리 부터 새 숫자 에 누적 해 야 한다.
즉 + = x% 10
첫 번 째 수 를 처리 한 후에 두 번 째, 즉 x% 100 을 처리 해 야 합 니 다. 순환 에 가입 하면 순환 조건 은 다음 과 같 습 니 다.
x / 10
되 돌아 오 는 정형 re 에 대해 매번 새로운 수 를 넣 을 때마다 원래 의 수 는 왼쪽으로 한 자 리 를 옮 깁 니 다. 즉,:
re * 10
넘 치 는 판단 에 대해 저 는 처음에 int 를 넘 치 게 하 는 생각 이 었 습 니 다. 넘 치 면 re 값 의 플러스 와 마이너스 가 뒤 바 뀌 었 습 니 다. 이때 원래 X 의 값 의 플러스 와 마이너스 가 re 와 다르다 고 판단 하면 됩 니 다.
그런데 leetcode 가 틀 렸 어!!그것 은 나 로 하여 금 자 연 스 럽 게 넘 치지 못 하 게 한다!!
네, 플랫폼 으로 고 개 를 숙 일 게 요.
다음은 re 를 long int 로 설정 하여 2 ^ 31 - 1 이상 인지 - 2 ^ 31 + 1 이하 인지 판단 하 는 것 입 니 다.
1 int reverse(int x){
2     long int re = 0;
3     for(; x; x /= 10)
4         re = re * 10 + x % 10;
5     if (re > 2147483647 || re < -2147483648)
6         return 0;
7     else
8         return re;
9 }

코드
실행 결과:
통과 하 다.
상세 한 상황 을 나타내다
실행 시간: 0 ms, 모든 C 제출 중 100.00% 의 사용 자 를 격파 하 였 습 니 다
메모리 소모: 5.9MB, 모든 C 제출 중 100.00% 의 사용 자 를 격파 하 였 습 니 다
 
나 는 초보 프로그래머 이다. 나 는 가장 간단 한 문제 부터 천천히 시작한다. 비록 간단 하지만, 나 는 모든 것 을 최선 을 다 해 야 한다.

좋은 웹페이지 즐겨찾기