提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 俩到经典题目
- 一、走方格的方案数
- 题目描述
- 解题分析
- 代码演示
- 二.另类加法
- 题目描述:
- 解题分析
- 常见的位运算
- 代码演示
- 总结
俩到经典题目
一、走方格的方案数
题目地址
题目描述
解题分析
本题思路采取递归
n1||m1时候方案数是m+n
m>1&&n>1时方案数是(m-1)n+(m,n-1);
如图是递归体,绿色和橙色方案加起来就是整个方案,绿色,橙色方案继续递归
代码演示
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static int fun(int m, int n) {
if (m == 1 || n == 1) {
return m + n;
} else if (m > 1 && n > 1) {
return fun(m - 1, n) + fun(m, n - 1);
}else{
return 0;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int result = fun(m, n);
System.out.println(result);
}
}
二.另类加法
题目链接
题目描述:
解题分析
本题需要考虑位运算
常见的位运算
& 如果俩个相应二级制位都为1,则1,否则0 (同1则1)
| 俩个相应二级制位有1,则1,否则0 (有1则1)
^相同为0,否则为1 (不相同为1)
异或的结果是俩个数相加(不考虑进位)
二进制与后左移一位结果是俩数相加进位后的结果(只考虑进位)
结论:俩数相加,不考虑进位,异或的值就是俩个数的和
代码演示
public int addAB(int A, int B) {
// write code here
int sum = 0;
if(B==0)
return A;
while (B != 0) {
sum = A ^ B;
int carry = (A & B)<<1;
A = sum;
B = carry;
}
return sum;
}
总结
1.& (同1则1)
| (有1则1)
^(不相同为1)
2.异或的结果是俩个数相加(不考虑进位)
二进制与后左移一位结果是俩数相加进位后的结果(只考虑进位)
结论:俩数相加,不考虑进位,异或的值就是俩个数的和