常用位运算
/**
* @author IT00ZYQ
* @Date 2021/4/9 9:48
**/
public class Test {
/**
* 打印32位整型n的二进制表示
* @param n
*/
public static void printByte(int n) {
System.out.print("整数n的二进制表示:");
for (int i = 31; i >= 0; i--) {
System.out.print((n & (1 << i)) == 0 ? 0 : 1);
}
System.out.println();
}
/**
* 获取32位整数n二进制表示中最右边的1,即最低位的1
* @param n
*/
public static void getLeftestOne(int n) {
System.out.println("整数n最低位的1的二进制表示为:" + (n & (~n + 1)));
}
public static void main(String[] args) {
int n = 18;
printByte(n);
getLeftestOne(n);
}
}
暴力递归与动态规划
- 暴力递归可以优化的条件:出现重复调用某一个子问题的情况
- 暴力递归优化成动态规划:记忆化搜索 -> 严格表结构(二维数组)实现动态规划
- 递归的可变参数的数量决定了严格表结构的维数
- 可变参数能少则少,每一个可变参数不要比int型更加复杂,除非可变参数只有一个
动态规划
动态规划过程中进行取余运算可能会导致运算结果不正确。
为什么动态规划不能进行取余运算
结果中有多少个零
转化成求有多少个5因子,10等于2 * 5,而5因子出现的次数必定少于2,故只需求出因子5出现的次数。
阶乘后的零