每日两题9

目录

另类加法

题目介绍

题目分析

代码

走方格的方案数字

题目介绍

题目分析

代码


另类加法

题目介绍

题目分析

1.想要解决这道题首先要了解到三种位运算:^ , & , <<

2.将1和2的二进制编码按位异或(^)运算,可以到3的二进制编码,此时1和2的二进制编码按位与(&)运算再左移一位结果为0.

3.可以得出结论若两个数字的二进制编码进行按位与和左移一位操作过后结果为0,则此时两个数字按位异或后的结果为两个数字相加的结果。

如果两个数字的二进制编码进行按位与和左移一位操作过后结果不为0,则将其中一个数字值赋为两个数字的二进制编码进行按位与和左移一位操作过后的值,另外一个数字的值赋为两个数字按位异或后的值,重复以上的操作。

  

代码

    //1另类加法
    public static int addAB(int A, int B) {
        int carry = (A & B) << 1;
        int sum = A ^ B;
        while (carry != 0) {
            A = sum;
            B = carry;
            carry = (A & B) << 1;
            sum = A ^ B;
        }
        return sum;
    }
    public static void main1(String[] args) {
        System.out.println(addAB(2,3));
    }

走方格的方案数字

题目介绍

题目分析

1.设方格的长和宽分别为M和N,通过分析可以知道当M或者N至少有一个长度为1时,求左上角的点到右下角的路径数目为M+N。

2.当M和N的长度都不为1的时候,可以将长度进一步分解到为1的情况。

 所以,可以采用递归的方法,递归的终止条件为M或N出现长度为1。利用子问题思路,将左上角点的右边点和下边点作为两个子问题分析,将结果相加。

代码

import java.util.*;
public class Main{
    public static int findNum(int N,int M) {
        //递归终止条件为长或宽出现长度为1的情况
        if ((N == 1 && M >= 1) || (M == 1 && N >= 1)) {
            return M + N;
        }
        //利用子问题思路
        int right = findNum(N,M - 1);
        int down = findNum(N - 1,M);
        return right + down;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            //输入行
            int N = sc.nextInt();
            //输入列
            int M = sc.nextInt();
            System.out.println(findNum(N, M));
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爆裂突破手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值