算法面试题 16.01. 交换数字(java / c / c++ / python / go / rust)
Posted 二当家的白帽子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法面试题 16.01. 交换数字(java / c / c++ / python / go / rust)相关的知识,希望对你有一定的参考价值。
文章目录
面试题 16.01. 交换数字:
编写一个函数,不用临时变量,直接交换numbers = [a, b]
中a
与b
的值。
样例 1:
输入:
numbers = [1,2]
输出:
[2,1]
提示:
- numbers.length == 2
- -2147483647 <= numbers[i] <= 2147483647
分析
- 面对这道算法题目,需要稍微考虑下。
- 通常交换都是需要一个临时变量的,但是本题要求不能用临时变量,所以需要考虑我们为什么需要临时变量。
- 交换a和b两个变量的值,需要先把a的值暂存,然后b的值存入a,再把暂存的值存入b。
a->temp
b->a
temp->b - 如果没有临时变量,那么就不能直接用变量b的值覆盖变量a的值,必须是在变量a的值里既保存原值,又能把变量b的值存进去。
- 如果两个值的取值范围比较小,其实可以在变量a里存变量a与变量b的和,然后用和减去变量b的值赋值给变量b,此时变量a的值是变量a与变量b的和,变量b存放变量a的值,再如法炮制即可完成交换。
a+b->a
a-b->b
a-b->a - 但是提示中整数的取值范围是32位有符号数,没办法用加法的方式,会溢出。
- 如果按照位来考虑,先把变量a的值的赋值为变量a和变量b每一位是否相等,有了这个值,则可以根据变量b的值算出变量a的值,也可以根据变量a的值算出变量b的值。
题解
java
class Solution
public int[] swapNumbers(int[] numbers)
numbers[0] ^= numbers[1];
numbers[1] ^= numbers[0];
numbers[0] ^= numbers[1];
return numbers;
c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* swapNumbers(int* numbers, int numbersSize, int* returnSize)
*returnSize = numbersSize;
numbers[0] ^= numbers[1];
numbers[1] ^= numbers[0];
numbers[0] ^= numbers[1];
return numbers;
c++
class Solution
public:
vector<int> swapNumbers(vector<int>& numbers)
numbers[0] ^= numbers[1];
numbers[1] ^= numbers[0];
numbers[0] ^= numbers[1];
return numbers;
;
python
class Solution:
def swapNumbers(self, numbers: List[int]) -> List[int]:
numbers[0] ^= numbers[1]
numbers[1] ^= numbers[0]
numbers[0] ^= numbers[1]
return numbers
go
func swapNumbers(numbers []int) []int
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];
return numbers;
原题传送门:https://leetcode-cn.com/problems/swap-numbers-lcci/
非常感谢你阅读本文~
欢迎【👍点赞】【⭐收藏】【📝评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
以上是关于算法面试题 16.01. 交换数字(java / c / c++ / python / go / rust)的主要内容,如果未能解决你的问题,请参考以下文章
算法面试题 16.01. 交换数字(java / c / c++ / python / go / rust)
leetcode每日一题---面试题 16.01. 交换数字(妙用异或关键字)