返回题库

交换两个整数

Number Swap

专题
Algorithmic Programming / 算法编程
难度
L4

题目详情

在不使用额外存储空间的情况下,交换两个整数 iijj

Swap two ints ii and jj w/o extra space?

解析

两种常见方法:

  • 加减法:
void swap(int &i, int &j){
  i = i + j;
  j = i - j;
  i = i - j;
}
  • 按位异或:
void swap(int &i, int &j){
  i = i ^ j;
  j = i ^ j;
  i = i ^ j;
}

Original Explanation

Answer:

  • Sum-difference:
void swap(int &i, int &j){
    i = i + j;
    j = i - j;  // old i
    i = i - j;  // old j
}
  • Bitwise XOR:
void swap(int &i, int &j){
    i = i ^ j;
    j = i ^ j;  // old i
    i = i ^ j;  // old j
}