JavaScript 교환 변 수 는 항상 4 가지 방법 으로 해석 합 니 다.

많은 알고리즘 은 두 개의 변 수 를 교환 해 야 한다.인 코딩 면접 에서"임시 변수 없 이 2 개의 변 수 를 교환 하 는 방법 은 무엇 입 니까?"라 고 물 을 수 있 습 니 다.나 는 변수 교환 을 실행 하 는 여러 가지 방법 을 알 게 되 어 매우 기쁘다.본 논문 에서 귀 하 는 약 4 가지 교환 방식(2 가지 추가 메모리 사용,2 가지 추가 메모리 사용 하지 않 음)을 알 게 될 것 입 니 다.
1.할당 해제
할당 문법(ES 2015 기능)을 해제 하면 배열 의 항목 을 변수 에 추출 할 수 있 습 니 다.예 를 들 어 다음 코드 는 배열 을 재 구성 합 니 다.
let a;
let b;
[a, b] = [1, 2, 3];
a; // => 1
b; // => 2
[a,b]=[1,2,3]은[1,2,3]배열 을 재 구성 하 는 재 구성 할당 입 니 다.[1,2,3]의 첫 번 째 항목 1 은 하나의 변수 a 를 분 배 했 고 두 번 째 항목 2 는 b 를 대응 적 으로 분배 했다.
배열 을 어떻게 재 구성 하 는 지 알 고 변 수 를 쉽게 교환 할 수 있 습 니 다.분할 교환 변수 a 와 b 를 사용 합 니 다.
let a = 1;
let b = 2;
[a, b] = [b, a];
a; // => 2
b; // => 1
교환 과정:
첫 번 째 단 계 는 재 구성 오른쪽 에 임시 배열[b,a](그 값 은[2,1])을 만 듭 니 다.
그리고 임시 수조 의 해체 가 발생 한다.[a,b]=[2,1].변수 a 는 2,b 는 1 을 분배 했다.a 와 b 의 교환 이 완료 되 었 습 니 다.
나 는 이런 재 구성 방법 을 좋아한다.왜냐하면 그것 은 짧 고 표 현 력 이 풍부 하기 때문이다.교환 은 한 문장 으로 만 실행 된다.그것 은 모든 데이터 형식 에 적 용 됩 니 다:숫자,문자열,불 값,대상.
대부분의 경우 변 수 를 바 꾸 기 위해 서 재 구성 할당 을 사용 하 는 것 을 권장 합 니 다.
2.임시 변수
임시 변 수 를 사용 하여 변 수 를 교환 하 는 것 은 고전 입 니 다.말 그대로 이 방법 은 추가 적 인 임시 변 수 를 필요 로 한다.
임시 변수 temp 를 사용 하여 변수 a 와 b 의 값 을 교환 합 니 다.
let a = 1;
let b = 2;
let temp;
temp = a;
a = b;
b = temp;
a; // => 2
b; // => 1
3.가감 법
추가 메모리(예 를 들 어 임시 배열 이나 변수)를 사용 하지 않 고 변 수 를 교환 할 수 있 습 니 다.
다음 예제 에 서 는 덧셈+뺄셈-산술 연산 자 교환 변수 a 와 b 를 사용 합 니 다.
let a = 1;
let b = 2;
a = a + b;
b = a - b;
a = a - b;
a; // => 2
b; // => 1
처음에는 a 가 1,b 가 2 였 다.교환 을 어떻게 실행 하 는 지 세 문장 을 봅 시다.
a=a+b 에 a 값 1+2 를 부여 합 니 다.
b=a-b 는 b 에 게 1+2-2=1(b 는 현재 1)을 부여 합 니 다.
a=a-b 는 a 의 할당 치 1+2-1=2(a 는 현재 2)입 니 다.
마지막 으로 a 는 2,b 는 1 이다.a 와 b 의 교환 이 완료 되 었 습 니 다.
비록 이런 방법 은 임시 변 수 를 사용 하지 않 지만 매우 큰 한계 가 있다.
우선,당신 은 정수 만 교환 할 수 있 습 니 다.
그 다음 에 첫 번 째 단계 a=a+b 에서 덧셈 을 할 때 숫자 가 넘 치 는 것 을 주의해 야 합 니 다(총 화 는 Number.MAX 보다 작 아야 합 니 다.SAFE_INTEGER)。
4.비트 XOR 연산 자
조작 수가 다 르 면 XOR 연산 자의 계산 결 과 는 true 입 니 다.이것 은 XOR 진가 표 입 니 다. 

JavaScript 에 서 는 XOR 연산 자 n1^n2 대 n1 과 n2 숫자의 모든 사람 에 게 XOR 작업 을 수행 합 니 다.
예 를 들 어 이것 은 5^7 평가(evaluates)가 2 인 방식 이다.
1 0 1(5 의 바 이 너 리)
1,1,1(7 의 바 이 너 리)
-----
0 1 0(5^7=2 의 바 이 너 리)
비트 별 XOR 는 2 개의 재 미 있 는 속성 을 가지 고 있 습 니 다:
n^n=0:같은 숫자 를 실행 하 는 비트 XOR 는 0 입 니 다.
n^0=n:한 숫자 에 대해 비트 차이 나 0 은 같은 숫자 입 니 다.
이 XOR 속성 들 은 변 수 를 교환 하 는 데 사용 할 수 있 습 니 다.a 와 b 변 수 를 어떻게 교환 하 는 지 보 여 줍 니 다.
let a = 1;
let b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
a; // => 2
b; // => 1
교환 과정:
a = a ^ b
b = a ^ b。1 a 기반 a^b 대체.그러므로 b=(a^b)^b=a^(b^b)=a^0=a.지금 b 는 a 가 아니 라 는 것 을 기억 하 세 요.
a = a ^ b。1 a 기반 a 는 a^b 로,2 b 기반 a 는 a 로 교체 합 니 다.그러므로 a=(a^b)^a=b^(a^a)=b^0=b.변수 a 가 b 로 변 합 니 다.
설명 이 복잡 하 다 고 생각 하 시 면 언제든지 뛰 어 넘 으 세 요.3 개의 할당 으로 구 성 된 비트 XOR(n^n=0 과 n^0=n)의 성질 은 a 와 b 의 값 을 교환 할 수 있 습 니 다.
비트 XOR 연산 자 를 사용 하여 변 수 를 교환 하 는 데 한계 가 있 습 니 다.정수 만 교환 할 수 있 습 니 다.
결론.
자 바스 크 립 트 는 추가 메모리 가 있 든 없 든 많은 변 수 를 교환 하 는 좋 은 방법 을 제공 합 니 다.
4.567917.제 가 사용 하 는 첫 번 째 방법 은 재 구성 할당[a,b]=[b,a]교환 변 수 를 사용 하 는 것 을 권장 합 니 다.이것 은 간단 하고 표 현 력 이 풍부 한 방법 이다두 번 째 방법 은 임시 변 수 를 사용한다.이것 은 할당 방법 을 대체 하 는 좋 은 선택 입 니 다세 번 째 방법 은 가감 법 을 사용 하고 다른 변수 나 메모 리 를 사용 하지 않 는 다.그러나 이 방법 은 교환 정수 에 국한 된다4.567917.마찬가지 로 비트 XOR 의 네 번 째 방법 으로 추가 메모 리 를 사용 하지 않 습 니 다.하지만 마찬가지 로 당신 은 정수 만 교환 할 수 있 습 니 다이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기