在不使用内置函数和中间变量的情况交换数字LeetCode力扣题解面试题16.01

87 阅读1分钟

#异或法
逻辑引用可参考转载原文

#Kotlin

class Solution {
    fun swapNumbers(numbers: IntArray): IntArray {           
     numbers[0] = numbers[0] xor numbers[1]        
     numbers[1] = numbers[1] xor numbers[0]        
     numbers[0] = numbers[0] xor numbers[1]        
     return numbers    
    }
  }

#Java

class Solution {
    public int[] swapNumbers(int[] numbers) {      
     numbers[0]^=numbers[1];    
     numbers[1]^=numbers[0];   
     numbers[0]^=numbers[1];   
     return numbers;    
    }
}

#Scala

object Solution {
    def swapNumbers(numbers: Array[Int]): Array[Int] = {
        numbers(0)^=   numbers(1)
        numbers(1)^=   numbers(0)
        numbers(0)^=   numbers(1)
        numbers
    }
}

#C

int* swapNumbers(int* numbers, int numbersSize, int* returnSize)
{
	*returnSize=2;
	numbers[0]^=numbers[1];
	numbers[1]^=numbers[0];
	numbers[0]^=numbers[1];
	return numbers;
}

#Rust

impl Solution {
    pub fn swap_numbers(mut numbers: Vec<i32>) -> Vec<i32> {        
        numbers[0] ^= numbers[1];    
        numbers[1] ^= numbers[0];        
        numbers[0] ^= numbers[1];        
        numbers    
        }
}

加减法 #Kotlin

class Solution {   
 fun swapNumbers(numbers: IntArray): IntArray {          
  numbers[0] = numbers[0] -numbers[1]        
  numbers[1] = numbers[1] +numbers[0]         
  numbers[0] = numbers[0] -numbers[1]         
  return numbers        
 }       
}

#Java

class Solution {   
 public int[] swapNumbers(int[] numbers) {       
    numbers[0] = numbers[0] -numbers[1] ;      
    numbers[1] = numbers[1] +numbers[0] ;        
    numbers[0] = numbers[0] -numbers[1]  ;            
    return numbers;        
   }
 }

#Scala

object Solution { 
def swapNumbers(numbers: Array[Int]): Array[Int] = {    numbers(1) = numbers(1) - numbers(0)   
     numbers(0) = numbers(0) + numbers(1)    
     numbers(1) = numbers(0) - numbers(1)   
     numbers(0) = numbers(0) - numbers(1)   
     numbers  
  }
 }

#C

由于使用int取值范围会越界产生溢出,所以使用无符号类型

/**incle * Note: The returned array must be malloced, assume caller calls free(). */
int* swapNumbers
(unsigned int* numbers, unsigned int numbersSize, int* returnSize)
 {
       numbers[1] = numbers[1] - numbers[0];   
       numbers[0] = numbers[0] + numbers[1];     
       numbers[1] = numbers[0] - numbers[1];   
       *returnSize = 2;     
       return numbers;
}

#Rust

impl Solution {
   pub fn swap_numbers(numbers: Vec<i32>) -> Vec<i32> {
       let mut numbers = numbers;
       numbers[0] = numbers[0] + numbers[1];
       numbers[1] = numbers[0] - numbers[1];
       numbers[0] = numbers[0] - numbers[1];
       numbers
   }
}

个人的LeetCode力扣题解GitHub代码仓库