编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:
输入: numbers = [1,2]
输出: [2,1]
提示:
numbers.length == 2
解题思路:
方法一:
求和
方法二:
异或
代码实现:
代码语言:javascript复制func swapNumbers(numbers []int) []int {
numbers[0] =numbers[1]
numbers[1]=numbers[0]-numbers[1]
numbers[0]-=numbers[1]
return numbers
}
代码语言:javascript复制func swapNumbers(numbers []int) []int {
numbers[0]^=numbers[1]
numbers[1]=numbers[0]^numbers[1]
numbers[0]^=numbers[1]
return numbers
}
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
示例1:
输入:n = 3
输出:4
说明: 有四种走法
示例2:
输入:n = 5
输出:13
提示:
n范围在[1, 1000000]之间
解题思路:
1,递归
到达第n步,可以是从n-3步迈3步,或者n-2迈2步,或者n-1迈1步
2,dp
状态转移方程,f(n)=f(n-3) f(n-2) f(n-1)
由于用到了n-3,n-2,n-1所以递增方式
代码语言:javascript复制func waysToStep(n int) int {
if n==1{
return 1
}
if n==2{
return 2
}
if n==3{
return 4
}
return (waysToStep(n-3) waysToStep(n-2) waysToStep(n-1))00000007
}
代码语言:javascript复制func waysToStep(n int) int {
dp:=make([]int,n)
if n==1{
return 1
}
if n==2{
return 2
}
if n==3{
return 4
}
dp[0]=1
dp[1]=2
dp[2]=4
for i:=3;i<n;i {
dp[i]=(dp[i-3] dp[i-2] dp[i-1])00000007
}
return dp[n-1]
}