劍指offer第二版-13.機(jī)器人的運(yùn)動(dòng)范圍(回溯法)

本系列導(dǎo)航:劍指offer(第二版)java實(shí)現(xiàn)導(dǎo)航帖

面試題13:機(jī)器人的運(yùn)動(dòng)范圍

題目要求:
地上有一個(gè)m行n列的方格,一個(gè)機(jī)器人從坐標(biāo)(0,0)的各自開始移動(dòng)酒贬,它每次可以向上下左右移動(dòng)一格问慎,但不能進(jìn)入橫縱坐標(biāo)數(shù)位之和大于k的格子探熔。
例如昌阿,當(dāng)k等于18時(shí)梢夯,機(jī)器人能進(jìn)入(35,37)言疗,因?yàn)?+5+3+7=18;但卻不能進(jìn)入(35,38)厨疙,因?yàn)?+5+3+8=19>18。
請(qǐng)問該機(jī)器人能夠到達(dá)多少個(gè)格子疑务。

解題思路:
本題依舊考察回溯法沾凄。
每前進(jìn)一步后,可選移動(dòng)項(xiàng)為上下左右四個(gè)知允;為了判斷某一個(gè)格子是否可以進(jìn)入從而進(jìn)行計(jì)數(shù)撒蟀,不僅需要考慮邊界值,計(jì)算各位數(shù)字之和温鸽,更要判斷該格子是否已經(jīng)被訪問過保屯,手负。所以需要一個(gè)布爾矩陣,用來記錄各格子是否已被訪問姑尺。整體思路與12題類似竟终,具體請(qǐng)參考本系列的導(dǎo)航帖

package chapter2;
/**
 * Created by ryder on 2017/7/4.
 * 機(jī)器人的運(yùn)動(dòng)范圍
 */
public class P92_RobotMove {
    //依舊回溯
    public static int movingCount(int threshold,int rowLen,int colLen){
        if(rowLen<=0 || colLen<=0 || threshold<0)
            return 0;
        boolean[][] visitFlag = new boolean[rowLen][colLen];
        for(int row=0;row<rowLen;row++){
            for(int col=0;col<colLen;col++)
                visitFlag[row][col] = false;
        }
        return movingCountCore(threshold,rowLen,colLen,0,0,visitFlag);
    }
    public static int movingCountCore(int threshold,int rowLen,int colLen,int row,int col,boolean[][] visitFlag){
        int count = 0;
        if(canGetIn(threshold,rowLen,colLen,row,col,visitFlag)){
            visitFlag[row][col] = true;
            count = 1+movingCountCore(threshold,rowLen,colLen,row-1,col,visitFlag)+
                    movingCountCore(threshold,rowLen,colLen,row+1,col,visitFlag)+
                    movingCountCore(threshold,rowLen,colLen,row,col-1,visitFlag)+
                    movingCountCore(threshold,rowLen,colLen,row,col+1,visitFlag);
        }
        return count;
    }
    public static boolean canGetIn(int threshold,int rowLen,int colLen,int row,int col,boolean[][] visitFlag){
        return row>=0 && col>=0 && row<rowLen
                && col<colLen && !visitFlag[row][col]
                && getDigitSum(row)+getDigitSum(col)<=threshold;
    }
    public static int getDigitSum(int number){
        int sum=0;
        while (number>0){
            sum += number%10;
            number/=10;
        }
        return sum;
    }

    public static void main(String[] args){
        System.out.println(movingCount(0,3,4)); //1
        System.out.println(movingCount(1,3,4)); //3
        System.out.println(movingCount(9,2,20)); //36
    }
}

運(yùn)行結(jié)果

1
3
36
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末切蟋,一起剝皮案震驚了整個(gè)濱河市统捶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柄粹,老刑警劉巖喘鸟,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異驻右,居然都是意外死亡什黑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門堪夭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愕把,“玉大人,你說我怎么就攤上這事茵瘾±窕” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵拗秘,是天一觀的道長(zhǎng)圣絮。 經(jīng)常有香客問我,道長(zhǎng)雕旨,這世上最難降的妖魔是什么扮匠? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮凡涩,結(jié)果婚禮上棒搜,老公的妹妹穿的比我還像新娘。我一直安慰自己活箕,他們只是感情好力麸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著育韩,像睡著了一般克蚂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筋讨,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天埃叭,我揣著相機(jī)與錄音,去河邊找鬼悉罕。 笑死赤屋,一個(gè)胖子當(dāng)著我的面吹牛立镶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播类早,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼媚媒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了莺奔?” 一聲冷哼從身側(cè)響起欣范,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎令哟,沒想到半個(gè)月后恼琼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屏富,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年晴竞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狠半。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡噩死,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出神年,到底是詐尸還是另有隱情已维,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布已日,位于F島的核電站垛耳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏飘千。R本人自食惡果不足惜堂鲜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望护奈。 院中可真熱鬧缔莲,春花似錦、人聲如沸霉旗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厌秒。三九已至读拆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間简僧,已是汗流浹背建椰。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工雕欺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岛马,地道東北人棉姐。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像啦逆,于是被迫代替她去往敵國和親伞矩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 題目描述地上有一個(gè)m行和n列的方格夏志。一個(gè)機(jī)器人從坐標(biāo)0,0的格子開始移動(dòng)乃坤,每一次只能向左,右沟蔑,上湿诊,下四個(gè)方向移動(dòng)一...
    yangqi916閱讀 1,050評(píng)論 0 1
  • 題目描述:地上有一個(gè)m行和n列的方格。一個(gè)機(jī)器人從坐標(biāo)0,0的格子開始移動(dòng)瘦材,每一次只能向左厅须,右,上食棕,下四個(gè)方向移動(dòng)...
    鬼谷神奇閱讀 1,200評(píng)論 0 0
  • 回溯-機(jī)器人的運(yùn)動(dòng)范圍 題目描述 地上有一個(gè)m行和n列的方格朗和。一個(gè)機(jī)器人從坐標(biāo)0,0的格子開始移動(dòng),每一次只能向左...
    Jacinth閱讀 546評(píng)論 0 0
  • 劍指 offer 在一個(gè)二維數(shù)組中簿晓,每一行都按照從左到右遞增的順序排序眶拉,每一列都按照從上到下遞增的順序排序。請(qǐng)完成...
    faremax閱讀 2,207評(píng)論 0 7
  • 題目要求 地上有一個(gè)m行n列的方格憔儿,一個(gè)機(jī)器人從坐標(biāo)(0忆植,0)的位置開始移動(dòng),他每次可以向左皿曲,右唱逢,上,下移動(dòng)一格屋休,...
    小莊bb閱讀 1,056評(píng)論 0 0