【Java版oj】day09不用加号的加法、走方格的方案数
创始人
2025-05-28 03:32:29

目录

 一、不用加号的加法

(1)原题再现

(2)问题分析

(3)完整代码

 二、走方格的方案数

(1)原题再现

(2)问题分析

(3)完整代码


 一、不用加号的加法

(1)原题再现

面试题 17.01. 不用加号的加法

        设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。

示例:

输入: a = 1, b = 1

输出: 2

(2)问题分析

        这道题要求不能用“+”等算数运算符,所以我们可以想到使用位运算符

符号描述运算规则
&两个位都为1时,结果才为1。

|

两个位都为0时,结果才为0。
^异或两个位相同为0,相异为1。
~取反0变1,1变0。
<<左移各二进位全部左移若干位,高位丢弃,低位补0
>>右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,右移补1。

        本题可以使用&和^运算符,使用&得到两数相加的进位情况,使用^得到两数相加的结果(没有加进位)

(3)完整代码

class Solution {public int add(int a, int b) {// write code hereint ans=a^b;//无进位的情况下int carry=a&b;//需要进位的地方while(carry!=0) {carry=carry<<1;int tmp=ans;ans=ans^carry;carry=tmp&carry;}return ans;}
}

 二、走方格的方案数

(1)原题再现

走方格的方案数_牛客题霸_牛客网

描述

        请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。

注:沿棋盘格之间的边缘线行走

输入描述:

输入两个正整数n和m,用空格隔开。(1≤n,m≤8)

输出描述:

输出一行结果

示例:

输入:

2 2

输出:

6

(2)问题分析

        这道题很明显是一道动态规划的题。需要额外注意的是n、m表示的是格子数,而我们走的是边,所以n和m都要+1,即2*2的4个格子有3*3的边框。

我们用二维数据记录每一步的状态。

状态:
子状态:从(0,0)到达(1,0),(1,1),(2,1),...(n,m)的路径数
              F(i,j): 从(0,0)到达F(i,j)的路径数

        到达黄色这一状态时可能是从上面走下来,也可能是从左边走过来的。这一点的路径数,就是左边一点的路径数+上边一点的路径数。
状态递推:
              F(i,j) = F(i-1,j) + F(i,j-1)
初始化: 因为只能向左或者向下,所以当只有一行时,只能向左,走法也只有一种;同理,当只有一列时,只能向下,走法也只有一种。
              特殊情况:第0行和第0列
              F(0,i) = 1
              F(i,0) = 1

返回结果:右下角
              F(n,m)

(3)完整代码

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();int [][]maxNum=new int[n+1][m+1];for(int i=0;i<=m;i++) {maxNum[0][i]=1;}for(int i=0;i<=n;i++) {maxNum[i][0]=1;}for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {maxNum[i][j]=maxNum[i-1][j]+maxNum[i][j-1];}}System.out.println(maxNum[n][m]);}
}


上一篇:【MySQL基础】6—子查询

下一篇:UML详解

相关内容

热门资讯

MCU上调试CAN总线问题汇总... 目录 问题一:两个can设备无法相互间收发数据 原因: 问题二ÿ...
招标 | 近期隐私计算项目招标... 开放隐私计算 1招标1、江阴智慧港口公共服务平台项目名称:江阴智慧港口公共服务平台公告...
解决网页中Mixed Cont... 在Web开发中,作为开发者我们无可避免地需要引入资源文件,或者需要发起A...
redis cluster 集... master-slave -sentinel集群master 写单点,无法扩容。 ...
Java发起同步和异步HTTP... 同步与异步概念辨析 同步(synchronous)和异步(...
Kubernetes安装与集群... 一、环境准备 1、机器环境前置条件 当前演示准备3台虚拟机环境,或者是3台阿里云服务器...
simscape仿真总结2-机... 最近用simscape进行机器人的仿真,记录和总结一下学习心得和踩过的坑。 参照B站...
Redis(一):数据结构-底... 前言 从本文开始,我将分享一下近期自学 Redis 的学习笔记,其中大部...
flask教程5:abort函... 文章目录一、abort()函数的使用1.传递状态码信息2.传递响应体消息二、自定义错误处理 app....
【玩转Jetson TX2 N... 1 VMware14 Workstation Pro安装 如果没有Ubuntu系统电脑,...
2023还有人不知道kuber... 文章目录Kubernetes(K8s)一、Openstack&VM1、**认识虚拟化****1.1*...
NOI2019模拟赛 T1牛油... 题目描述 牛油果是一种神秘的水果,其具有一个坚固程度x≥0x\geq 0x≥0...
嵌入式软件开发之Linux下C... 目录 前沿 Hello World! 编写代码 编译代码 GCC编译器  gcc 命...
云原生|Rancher与Ope... 目录一、Rancher(一)介绍(二)优点&...
如何突破卫星影像建模难点?重建... 日前,由重建大师生成的首个“珞珈三号01星”卫星影像三维模型一经发出,引...
L1-085 试试手气 L1... 我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状...
SpringSecurity客... 概述 FilterChainProxy是spring-security的入口,包含默认...
数据结构--二叉树 目录1.树概念及结构1.1数的概念1.2数的表示2.二叉树概念及结构2.1二叉树的概念2.2数据结构...
Qt之QUrl和QUrlQue... QUrlQUrl 类提供了一个方便的接口使用 URLs。最常见的使用QUrl 的方式是通过构造函数来...
函数指针二三事 1 什么是函数指针? ​ 函数指针,顾名思义,它是一个指向...
[ 红队知识库 ] Windo... 🍬 博主介绍 👨‍🎓 博主介绍:大家好...
【PowerBI】PowerB... 目的: 陈述PowerBI连接Mysql数据库的坑。 方法1:直接使用【...
BI数据可视化|可自动刷新的可... BI数据可视化大屏和其他的BI报表一样,都是可用于日常的决策中,因此除了...
Linux 练习十二 (Lin... 文章目录1 计算机网络基础知识1.1 OSI参考模型和TCP/IP参考模型1.2 TCP 协议1.2...
SQL语言基础教学 | Mys... SQL语言基础教学SQL(Structured Query Languageÿ...
pandas数据分析(三) 书接pandas数据分析(二) 文章目录DataFrame数据处理与分...
DC-DC升压模块隔离高压稳压... 特点● 效率高达 80%● 2*2英寸标准封装● 单双电压输出● 价格低● 大于600V高压,稳压输...
Java【多线程基础2】 Th... 文章目录前言一、Thread类1, 构造方法2, 常用成员属性3, 常用成员方法3.1, start...
TDK| 电源——反激变压器设... 电源参数根据功率、输入输出的情况,我们选择反激电源拓扑。反激式变压器的优点有:1、 电...
Python:判断语句 目录一、布尔类型1.1定义1.2获取二、逻辑运算符2.1and运算符2.2or运算符2.2not运算...