剑指offer

机器人的运动范围

数组的应用和递归

package com.wang.test;

public class Myso {

    /**
* 题目描述
* 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。
* 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
* @param threshold 限制条件
* @param rows 数组的总行数
* @param cols 数组的总列数
* @return 能达到的格子数
*/ public static int movingCount(int threshold, int rows, int cols){
//定义一个二维数组,标记已经访问的位置
//1 表示已经访问了
int[][] mark = new int[rows][cols]; //调用移动函数,进行计算和计数,然后返回最终值
int count = move(threshold,rows,cols,0,0,mark); return count;
} /**
*
* @param threshold 限制条件
* @param rows 数组的总行数
* @param cols 数组的总列数
* @param strr 开始位置的行号 start_row
* @param strc 开始位置的列号 start_col
* @param mark 标记数组
* @return 返回格子数
*/
public static int move(int threshold, int rows, int cols,int strr,int strc,int[][] mark) { /*
判断条件:
strr<0:初始行号不能小于0
strc<0:初始列号不能小于0
strr>=rows :初始行号不能大于等于整个数组的行号
strc>=cols :初始列号不能大于等于这个数组的列号
mark[strr][strc] == 1 初始值为1就表示已经访问了,走到最后了,该退出函数了
!limit(threshold,strr,strc) :判断是否符合条件
这个判断相当于出口
*/
if(strr<0||strc<0||strr>=rows ||strc>=cols ||mark[strr][strc] == 1 || !limit(threshold,strr,strc)){
return 0;
} //标记初始值为1,假定的
mark[strr][strc] = 1; //进行递归,开始是0,0;不需要上/左
return 1+move(threshold,rows,cols,strr+1,strc,mark)+move(threshold,rows,cols,strr,strc+1,mark);
// move(threshold,rows,cols,strr-1,strc,mark)+
// move(threshold,rows,cols,strr,strc-1,mark); } /**
* 进行判断是否符合条件
* @param threshold 限制条件
* @param strr 当前位置行
* @param strc 当前位置列
* @return 返回值为true 代表不可访问,false代表可以访问
*/
public static boolean limit(int threshold, int strr, int strc) { boolean limit = true;
//行的位数和
int sum_row = 0;
//列的位数和
int sum_col = 0; //求行的位数和
while(strr>0){
sum_row += strr%10;//取出末位进行相加
strr /= 10;//将数进行右移
}
// 求列位数的和
while(strc>0){
sum_col += strc%10;
strc /= 10;
} //进行判断,行的位数和+列的位数 与 限制条件进行对比
// > 没有限制
// < 有限制
if(sum_col+sum_row > threshold){
limit =false;
}
//返回判断结果
return limit;
} //调用进行测试
public static void main(String[] args) {
int i = movingCount(10,7,7);
System.out.println(i);
} }

剑指offer——2的更多相关文章

  1. 剑指Offer面试题:1.实现Singleton模式

    说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...

  2. 剑指Offer面试题:14.链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  3. 《剑指offer》面试题12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

  4. 《剑指offer》面试题11: 数值的整数次方

    面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...

  5. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  6. 面试题目——《剑指Offer》

    1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...

  7. 剑指offer习题集2

    1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...

  8. 剑指offer习题集1

    1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...

  9. 剑指Offer:面试题20——顺时针打印矩阵(java实现)

    题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...

  10. 牛客网上的剑指offer题目

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...

随机推荐

  1. zabbix邮件报警设置(加密)

    邮件设置如下 端口号选择465

  2. 黑菜菌的JAVA学习笔记

    简介 本文是笔者对<JAVA编程思想>的学习笔记.以自己的思维理解来写下这篇文章,尽可能地简练,易懂.本文将随本人学习进度实时更新 对象导论 抽象过程 汇编语言是对底层机器码的抽象,而面向 ...

  3. PHP图片压缩类,高清无损直接用就ok啦

    这个不完全是我自己写的-_-!,但是好用呀 <?php /** * Created by PhpStorm. * Note:文件介绍 * User: Lynly * Date: 2018/11/ ...

  4. 再解决不了前端加密我就吃shi

    参考文章 快速定位前端加密方法 渗透测试-前端加密测试 前言 最近学习挖洞以来,碰到数据做了加密基本上也就放弃了.但是发现越来越多的网站都开始做前端加密了,不论是金融行业还是其他.所以趁此机会来捣鼓一 ...

  5. C面向对象: 升级版本实现:同步逻辑、少量连续失败则增补、多次连续失败则拉长同步周期

    // C语言之 面向对象+虚事务的抽象 /*********** 进阶练习: (对虚的事物的抽象) 完善部门职责 ***********************/ #include <stdio ...

  6. 手把手教你AspNetCore WebApi:入门

    需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...

  7. MacOS下Terminal获取GPS经纬度坐标

    通过命令行直接获取经纬度坐标MacOS 首先下载WhereAmI,最新版本: https://github.com/robmathers/WhereAmI/releases/download/v1.1 ...

  8. 插头 dp

    插头dp 洛谷 黑题板子? P5056 给出n×m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? 1.轮廓线 简单地说,轮廓线就是已决策格子和未决策格子的分界线: 2,插 ...

  9. 【基础】dp系列1

    序列双段最大子段和问题 (也许很水但蒟蒻刚刚学dp就来记录一下) 题目链接 题意就是求序列中的任意两段的最大子段和最大. 我们先预处理出来前缀和,方便求最大子段和. 对于每一个i都求一遍1到i的最大子 ...

  10. AMD Ryzen 5000系列桌面处理器 2020年10月8日发布

    AMD Ryzen 5 5600X 6核心12线程,基础频率3.7GHz,最大频率4.6GHz,二级缓存3MB,三级缓存32MB,不锁频,支持DDR4 3200MHz内存,台积电7纳米工艺,PCIe ...