地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格, 但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37), 因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

package edu.bjtu.day8_27;

import java.util.Scanner;

/**
 * @author Allen
 * @version 创建时间:2017年8月27日 下午7:55:46
 * 类说明:链接:https://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,
但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),
因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
 */

public class MainNumOfPoint {
    public static void main(String args[]){
        Soution solution = new Soution();
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        String[] strArr=str.split(",");
        int a=Integer.parseInt(strArr[0]);
        int b=Integer.parseInt(strArr[1]);
        int c=Integer.parseInt(strArr[2]);

        int num=solution.moveingCount(a,b,c);
        System.out.println(num);
    }
}

class Soution{
    public int moveingCount(int key,int rows,int cols){
        boolean flag[][]=new boolean[rows][cols];
        return helper(flag,rows,cols,key,0,0);
    }

    int helper(boolean flag[][],int rows, int cols, int threshold,
            int initRow,int initCol){

        if(initRow < 0 || initRow >=rows || initCol <0 || initCol >= cols ||
                bitsum(initRow)+bitsum(initCol)>threshold || flag[initRow][initCol]){
            return 0;
        }

        flag[initRow][initCol]=true;

    /*    for(int i=0; i<rows; i++){
            for(int j=0; j<cols; j++){
                System.out.print(flag[i][j]);
            }
            System.out.println();
        }
        System.out.println();*/

        return helper(flag, rows, cols, threshold, initRow-1, initCol)+
                helper(flag, rows, cols, threshold, initRow+1, initCol)+
                helper(flag, rows, cols, threshold, initRow, initCol-1)+
                helper(flag, rows, cols, threshold, initRow, initCol+1)+1;
        }

    int bitsum(int num){
        int sum=0;
        while(num!=0){
        sum+=num%10;
        num/=10;
        }
        return sum;
    }
}
时间: 2024-10-11 22:46:02

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格, 但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37), 因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?的相关文章

剑指Offer(Java版)第十二题:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。 如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38), 因为3+5+3+8=19。请问该机器人能够到达多少个格子?

/*地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子. 如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18.但它不能进入方格(35, 38), 因为3+5+3+8=19.请问该机器人能够到达多少个格子?*/public class Class12 { public int moveCount(int rows, int cols, int threshold){

如何快速选中某单元格所在的整行或整列 Excel教程

我们可以使用快捷键的操作来快速选中B3单元格所在的整行或整列,操作方法如下,请大家参阅! 一.正规的快捷键操作 ①快速选中整行 按下键盘上的 Shift Space 即同时按下键盘上的Shift 空格键,这样,就能快速选中B3所在行的整行了. 操作方法注意,可先按下Shift不放,再按下空格键,这样更容易选中整行. ②快速选中整列 按下键盘上的 Ctrl Space 即同时按下键盘上的Ctrl 空格键,这样,就能快速选中B3所在行的整列了. 操作方法注意,可选按下Ctrl不放,再按下空格键,这样

c语言:实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定

实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表. 程序: #include<stdio.h> void mul(int n)//multiplication 乘法 { int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=%-2d  ", i, j, i*j); //其中%2d中的2表示

poi获取合并单元格内的第一行第一列的值

当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: 1 import java.io.FileInputStream; 2 import java.io.FileNotFoundException; 3 import java.io.IOException; 4 5 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 6 import org.apache.poi.ss.

2.2 跨多行跨多列的表格

上节所示的表格比较简单,如果我要插入一张图片,并且要占4个单元的空间,那怎么办?这就要用到跨多行跨多列的表格,本节就开始讲解如何实现把多个单元格合并成一个单元格. 本节单词记忆:属性 1.cospan 2.rowspan 网页学习网提示:html语言非常简单,不需要逻辑理解,而绝大部分朋友觉得它难以掌握,90%的原因在于英语单词不过关,所以每节记忆几个单词是非常有必要的. 一.什么是跨多行跨多列的表格 有时可能要将多行或多列合并成一个单元格,即可以创建跨多列的行,或创建跨多行的列.colspan

行存储和列存储

传统的行式数据库将一个个完整的数据行存储在数据页中.这种方式在大数据量查询的时候会出现以下问题 1.在没有索引的情况下,会把一行全部查出来,查询会使用大量IO 2.虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间 但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的. 一般来说,OLTP(Online Transaction Processing,联机事务处理)应用适合采用这种方式. 一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只

html5的行标签与列标签

html5的标签很多,这里不一一列举.下面只将常用的一些html5的行标签和列标签进行了分类总结,方便大家学习借鉴.注意:一些标签可在css样式中进行行标签与列标签的互相转换,这里所列举的标签没有进行任何样式的设置,所有列标签和行标签经本人亲测有效.块标签: <h1>一级标题 <h2>二级标题 <h3>三级标题 <h4>四级标题 <h5>五级标题 <h6>六级标题 <ul>无序列表 <ol>有序列表 <d

地瓜君的excel小课堂——行函数与列函数

大家用Excel处理数据的时候经常会用到一些查找引用函数,今天地瓜君就来和大家一起学习一下查找引用函数中的行函数与列函数啦. 导航:1.row函数 2.rows函数 3.column函数 4.columns函数 我们重点介绍这4个函数里最常见也是非常实用的函数row函数,其他3个函数不是最常用所以就稍微简单的介绍下啦 一.row函数(返回一个引用的行号) 语法:=row(reference) 说明:如果省略reference(参数),则默认返回row函数所在单元格的行号. 参数reference

VBA取得EXCEL表格中的行数和列数

VBA取得EXCEL表格中的行数和列数 初学EXCEL宏的童鞋,总是很想知道表格中含有数据的行数和列数,尤其是行数和列数不确定的情况下.这样可以避免很多的错误,并且可以提高效率.但每次用到的时候到网上查找时,总是给了很多无用的答案,往往找不到想要的结果.笔者也是每次使用时,临时查找总是很头疼.偶然发现一篇博客,上面详细记录了不同的方法,笔者测试了几种发现真的很好用.本着分享万岁的精神,将博客内容共享出来.希望对大家有所帮助. 来源:http://www.okexcel.com.cn/bbs/vi