国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

暑期代碼每日一練Day3:874. 模擬行走機(jī)器人

這篇具有很好參考價(jià)值的文章主要介紹了暑期代碼每日一練Day3:874. 模擬行走機(jī)器人。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

題目

874. 模擬行走機(jī)器人
暑期代碼每日一練Day3:874. 模擬行走機(jī)器人,# LeetCode刷題 總結(jié),java,方向數(shù)組,哈希表
暑期代碼每日一練Day3:874. 模擬行走機(jī)器人,# LeetCode刷題 總結(jié),java,方向數(shù)組,哈希表
暑期代碼每日一練Day3:874. 模擬行走機(jī)器人,# LeetCode刷題 總結(jié),java,方向數(shù)組,哈希表
暑期代碼每日一練Day3:874. 模擬行走機(jī)器人,# LeetCode刷題 總結(jié),java,方向數(shù)組,哈希表


分析

這道題就是個(gè)簡(jiǎn)單的模擬
主要有兩點(diǎn)考察點(diǎn):

  • 對(duì)方向數(shù)組的運(yùn)用
    方向數(shù)組存儲(chǔ)的是各個(gè)方向的單位向量,也即:
方向 X Y
向北 0 1
向東 1 0
向南 0 -1
向西 -1 0

存儲(chǔ)在數(shù)組中,則是方向數(shù)組:

int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};

我們很容易發(fā)現(xiàn):

dx[0]  //北方
dx[1]  //東方
dx[2]  //南方
dx[3]  //西方

我們可以使用一個(gè)變量j來(lái)指示當(dāng)前處于什么方向,j始終只有0、1、2、3這四個(gè)取值,指示北、東、南、西四個(gè)方向,那么怎么實(shí)現(xiàn)j在這三個(gè)取值之間來(lái)回有序切換呢?
我們可以利用去模運(yùn)算,假設(shè)我們初始面向北方,即j為0,那么當(dāng)我們想向左轉(zhuǎn)的時(shí)候,是面向西方,則j要相應(yīng)的變?yōu)?,這時(shí),我們進(jìn)行的操作是(j-1+4)%4,為什么還要+4呢?因?yàn)樨?fù)數(shù)對(duì)正數(shù)去模,還是負(fù)數(shù),就出了范圍,這里我們通過(guò)加上一個(gè)模數(shù)4的倍數(shù),來(lái)使結(jié)果始終為正數(shù)。
因此,我們總結(jié)轉(zhuǎn)向操作的實(shí)現(xiàn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-599355.html

j = (j-1+4)%4;   // 左轉(zhuǎn)
j = (j+1+4)%4;   // 右轉(zhuǎn)
  • 怎么實(shí)現(xiàn)快速判斷當(dāng)前點(diǎn)是否在障礙物點(diǎn)集中
    這里我們可以利用HashSet
    把障礙物點(diǎn)以String字符串的形式存放在HashSet中。
    在Java中,如果您在HashSet中存放字符串,那么每次調(diào)用contains方法,底層判斷兩個(gè)字符串相等與否時(shí),調(diào)用的是equals方法而不是==運(yùn)算符。
    這是因?yàn)?code>==運(yùn)算符比較的是兩個(gè)對(duì)象的引用地址,即它們是否指向同一個(gè)內(nèi)存地址。而String類重寫了equals方法,比較的是兩個(gè)字符串的內(nèi)容是否相等,而不是它們的引用地址。

代碼

class Solution {
    public int robotSim(int[] commands, int[][] obstacles) {
        // 設(shè)置方向數(shù)組 初始為y軸方向 往大是向右轉(zhuǎn),往小是向左轉(zhuǎn)
        int[] dx = {0, 1, 0, -1};
        int[] dy = {1, 0, -1, 0};

        int cur_x = 0,cur_y = 0; // 當(dāng)前位置 初始為0
        int max_dis = 0;         // 最大歐氏距離

        // 創(chuàng)建一個(gè)障礙物點(diǎn)集
        PointSet pointSet = new PointSet(obstacles);
        int j = 0;  //控制方向   始終在0 1 2 3的范圍內(nèi)
        for(int i=0;i<commands.length;i++){
            int op = commands[i];
            if(op>=1&&op<=9){
                int[] point = new int[2];  //下一步試探點(diǎn)
                while(op>0){
                    point[0] = cur_x+dx[j];
                    point[1] = cur_y+dy[j];
                    //試探下一步能不能走
                    if(pointSet.contains(point))   //被建筑物擋住不能走
                        break;
                    else{   //能走,則走,且在走的過(guò)程中把最大歐氏距離的平方更新
                        cur_x = cur_x+dx[j];
                        cur_y = cur_y+dy[j];
                        max_dis = Math.max(max_dis,cur_x*cur_x+cur_y*cur_y);
                    }
                    op--;
                }
            }
            else if(op==-2){
                j = (j-1+4)%4;   // 左轉(zhuǎn)
                continue;
            }
            else if(op==-1){
                j = (j+1+4)%4;   // 右轉(zhuǎn)
                continue;
            }
        }
        return max_dis;
    }
}
//哈希set 高效判斷該點(diǎn)是否存在
public class PointSet {
    private HashSet<String> pointSet;
    // 構(gòu)造函數(shù) 參數(shù)是一個(gè)二維點(diǎn)集
    public PointSet(int[][] points) {
        pointSet = new HashSet<>();
        // 把點(diǎn)集中的點(diǎn)都加進(jìn)去
        for (int[] point : points) {
            pointSet.add(point[0] + "," + point[1]);  //以字符串形式存儲(chǔ)
        }
    }

    public boolean contains(int[] point) {
        return pointSet.contains(point[0] + "," + point[1]);
    }
}

到了這里,關(guān)于暑期代碼每日一練Day3:874. 模擬行走機(jī)器人的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ?LeetCode解法匯總874. 模擬行走機(jī)器人

    https://github.com/September26/java-algorithms 機(jī)器人在一個(gè)無(wú)限大小的 XY 網(wǎng)格平面上行走,從點(diǎn)? (0, 0) ?處開始出發(fā),面向北方。該機(jī)器人可以接收以下三種類型的命令? commands ?: -2 ?:向左轉(zhuǎn)? 90 ?度 -1 ?:向右轉(zhuǎn)? 90 ?度 1 = x = 9 ?:向前移動(dòng)? x ?個(gè)單位長(zhǎng)度 在網(wǎng)格上有一些格子

    2024年02月11日
    瀏覽(31)
  • 1041.困于環(huán)中的機(jī)器人 && 874.模擬行走的機(jī)器人 && 模擬行走的機(jī)器人 2 (三道機(jī)器人的模擬題)

    對(duì)于直接行走類的題,我們都可以用 int[][] dirs = new int[][]{{0,1}, {-1,0}, {0,-1}, {1,0}}; 來(lái)表示向 北 西 南 東 走一步 可以 int x = 0, y = 0, d = 0 xy 表示坐標(biāo),d表示方向,要和上面表示的方向?qū)?yīng) 由于是對(duì)應(yīng)的 d = 0 表示北 d = 1 表示西 d = 2 表示南 d = 3 表示東 即逆時(shí)針一圈 左轉(zhuǎn): d =

    2024年02月16日
    瀏覽(30)
  • 【暑期每日一練】 day11

    【暑期每日一練】 day11

    目錄 選擇題 (1) 解析:? (2) 解析:? (3) 解析:? (4) 解析: (5) ?解析: 編程題 題一 描述 示例 提示? 解析 : 代碼實(shí)現(xiàn) 題二 描述 輸入描述: 輸出描述: 示例 解析: 代碼實(shí)現(xiàn) 總結(jié) ? ? 1、聲明以下變量,則表達(dá)式: ch/i + (f*d – i) 的結(jié)果類型為( ) ? A: ch

    2024年02月14日
    瀏覽(21)
  • 【暑期每日一練】 day10

    【暑期每日一練】 day10

    目錄 選擇題 (1) 解析: (2) 解析:? (3) 解析:? (4) 解析:? (5) 解析:? 編程題 題一 描述 示例 解析: 代碼實(shí)現(xiàn) 題二 描述 示例 提示 解析 : ?代碼實(shí)現(xiàn) 總結(jié) ? 1、求函數(shù)返回值,傳入 -1 ,則在64位機(jī)器上函數(shù)返回( ) A: 死循環(huán)? B: 64? C: 32? D: 16 ?答案:C

    2024年02月14日
    瀏覽(19)
  • 【暑期每日一練】 day7

    【暑期每日一練】 day7

    目錄 選擇題 (1) 解析:? (2) 解析:? (3) 解析:? (4) 解析:? (5) 解析:? 編程題 題一 描述 輸入描述: 輸出描述: 示例 解析? 代碼實(shí)現(xiàn)? 題二 描述 示例 ?提示 解析? 代碼實(shí)現(xiàn)? 總結(jié) ? 1、以下對(duì)C語(yǔ)言函數(shù)的有關(guān)描述中,正確的有【多選】( ) A: 在C語(yǔ)言中

    2024年02月15日
    瀏覽(61)
  • C語(yǔ)言每日一練------(Day3)

    C語(yǔ)言每日一練------(Day3)

    本專欄為c語(yǔ)言練習(xí)專欄,適合剛剛學(xué)完c語(yǔ)言的初學(xué)者。本專欄每天會(huì)不定時(shí)更新,通過(guò)每天練習(xí),進(jìn)一步對(duì)c語(yǔ)言的重難點(diǎn)知識(shí)進(jìn)行更深入的學(xué)習(xí)。 今天練習(xí)題的: 尼科徹斯定理 等差數(shù)列 ??博主csdn個(gè)人主頁(yè):小小unicorn ?專欄分類:C語(yǔ)言天天練 ??代碼倉(cāng)庫(kù):小小

    2024年02月10日
    瀏覽(17)
  • C語(yǔ)言:選擇+編程(每日一練Day3)

    C語(yǔ)言:選擇+編程(每日一練Day3)

    目錄 選擇題: 題一: 題二: 題三: 題四: 題五: 編程題: 題一:記負(fù)均正 思路一: 題二:旋轉(zhuǎn)數(shù)組的最小數(shù)字 思路一: 1、已知函數(shù)的原型是: int fun(char b[10], int *a); ,設(shè)定義: char c[10];int d; , 正確的調(diào)用語(yǔ)句是 ( ) A: fun(c,d);? ?? B: fun(c,d);? ? C: fun(c,d);? ? D: f

    2024年02月09日
    瀏覽(21)
  • 【ACM】—藍(lán)橋杯大一暑期集訓(xùn)Day3

    【ACM】—藍(lán)橋杯大一暑期集訓(xùn)Day3

    ??歡迎來(lái)到本文?? ??個(gè)人簡(jiǎn)介:陳童學(xué)哦,目前學(xué)習(xí)C/C++、算法、Python、Java等方向,一個(gè)正在慢慢前行的普通人。 ??系列專欄:陳童學(xué)的日記 ??其他專欄:C++STL,感興趣的小伙伴可以看看。 ??希望各位→點(diǎn)贊?? + 收藏?? + 留言?? ? ??學(xué)習(xí)應(yīng)使你快樂(lè)!望與諸君

    2024年02月16日
    瀏覽(16)
  • 【算法-數(shù)組-pyhton】模擬行走機(jī)器人

    【算法-數(shù)組-pyhton】模擬行走機(jī)器人

    ??????歡迎來(lái)到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識(shí),也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁(yè),持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月12日
    瀏覽(20)
  • 【LeetCode 算法】Walking Robot Simulation 模擬行走機(jī)器人 - 二分

    機(jī)器人在一個(gè)無(wú)限大小的 XY 網(wǎng)格平面上行走,從點(diǎn) (0, 0) 處開始出發(fā),面向北方。該機(jī)器人可以接收以下三種類型的命令 commands : -2 :向左轉(zhuǎn) 90 度 -1 :向右轉(zhuǎn) 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移動(dòng) x 個(gè)單位長(zhǎng)度 在網(wǎng)格上有一些格子被視為障礙物 obstacles 。第 i 個(gè)障礙物位

    2024年02月11日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包