【算法刷题】—7.14模拟,数组螺旋输出,机器人走路

简介: ✨今日算法三题1.二进制求和2.螺旋矩阵3.模拟行走机器人

✨今日算法三题


1.二进制求和

2.螺旋矩阵

3.模拟行走机器人


文章目录


1.二进制求和


题目描述


思路详解

有个较为简单的思路:

直接把两个数转换为十进制整数进行相加,再转换成二进制。

但是这里时间复杂度为O(m+n),即两个字符串的位数,同时也存在位数精度问题。


这里采用模拟的方法。模拟就是让计算机模拟我们人进行解题的过程。

二进制计算呢,逢二进一,所以每一位的数值就等于对应位置(a+b+carry)%2,这里carry为上一位进上来的数值,那么本位的进位值为(a+b+carry)/ 2. 按照这样的计算过程遍历完a和b的每一位就可以得出结果了。

注意,刚开始我们计算的时候要把每一位对其哦,当然计算机也少不了对齐这个步骤,我们可以倒着计算来存储最后反转一下,也可以短位左补零使其长度一样,然后先从高位开始算。


代码与结果

class Solution {
    public String addBinary(String a, String b) {
        StringBuffer ans = new StringBuffer();
        int n = Math.max(a.length(), b.length()), carry = 0;
        for (int i = 0; i < n; ++i) {
            carry += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0;
            carry += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;
            ans.append((char) (carry % 2 + '0'));
            carry /= 2;
        }
        if (carry > 0) {
            ans.append('1');
        }
        ans.reverse();
        return ans.toString();
    }
}

2.螺旋矩阵


题目描述

思路详解


本题采用模拟迷宫寻路的方法实现。

首先定义四个方向,顺序为,右下左上。看到数据-100

注意,这里的换方向条件要么达到边界,要么下一步已经访问过。值得注意的是,我们首先要访问完一圈再访问一圈,所以我们的方向就不能随便改哦,只能一个方向走完再换。


代码与结果

class Solution {
    int INF = 101;
    public List<Integer> spiralOrder(int[][] mat) {
        List<Integer> ans = new ArrayList<>();
        int m = mat.length, n = mat[0].length;
        // 定义四个方向
        int[][] dirs = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
        for (int x = 0, y = 0, d = 0, i = 0; i < m * n; i++) {
            ans.add(mat[x][y]);
            mat[x][y] = INF;
            // 下一步要到达的位置
            int nx = x + dirs[d][0], ny = y + dirs[d][1];
            // 如果下一步发生「溢出」或者已经访问过(说明四个方向已经走过一次)
            if (nx < 0 || nx >= m || ny < 0 || ny >= n || mat[nx][ny] == INF) {
                d = (d + 1) % 4;
                nx = x + dirs[d][0]; ny = y + dirs[d][1];
            }
            x = nx; y = ny;
        }
        return ans;
    }
}


3.模拟行走机器人


题目描述

思路详解


本题和上一题很相似,定义接收到的方向。也注意到限制了步数,那么去哦们就可以限制输入。同时这个障碍物的坐标,我们采用set集合存储,方便查询,同时提高效率。


代码与结果

class Solution {
    public int robotSim(int[] commands, int[][] obstacles) {
        int[] dx = new int[]{0, 1, 0, -1};
        int[] dy = new int[]{1, 0, -1, 0};
        int x = 0, y = 0, di = 0;
        // Encode obstacles (x, y) as (x+30000) * (2^16) + (y+30000)
        Set<Long> obstacleSet = new HashSet();
        for (int[] obstacle: obstacles) {
            long ox = (long) obstacle[0] + 30000;
            long oy = (long) obstacle[1] + 30000;
            obstacleSet.add((ox << 16) + oy);
        }
        int ans = 0;
        for (int cmd: commands) {
            if (cmd == -2)  //left
                di = (di + 3) % 4;
            else if (cmd == -1)  //right
                di = (di + 1) % 4;
            else {
                for (int k = 0; k < cmd; ++k) {
                    int nx = x + dx[di];
                    int ny = y + dy[di];
                    long code = (((long) nx + 30000) << 16) + ((long) ny + 30000);
                    if (!obstacleSet.contains(code)) {
                        x = nx;
                        y = ny;
                        ans = Math.max(ans, x*x + y*y);
                    }
                }
            }
        }
        return ans;
    }
}


✨总结


今天主要练习了模拟的思想,我们对人工操作或者一些时间进行模拟,从而得出结果,这也是计算机最初的目的。多多练习才能熟练使用哦!!!



相关文章
|
11月前
|
传感器 算法 安全
机器人路径规划和避障算法matlab仿真,分别对比贪婪搜索,最安全距离,RPM以及RRT四种算法
本程序基于MATLAB 2022A实现机器人路径规划与避障仿真,对比贪婪搜索、最安全距离、RPM和RRT四种算法。通过地图模拟环境,输出各算法的路径规划结果,展示其在避障性能与路径优化方面的差异。代码包含核心路径搜索逻辑,并附有测试运行图示,适用于机器人路径规划研究与教学演示。
1135 64
|
9月前
|
算法 机器人 Serverless
【机器人路径规划】基于6种算法(黑翅鸢优化算法BKA、SSA、MSA、RTH、TROA、COA)求解机器人路径规划研究(Matlab代码实现)
【机器人路径规划】基于6种算法(黑翅鸢优化算法BKA、SSA、MSA、RTH、TROA、COA)求解机器人路径规划研究(Matlab代码实现)
763 2
|
9月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
679 4
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
1076 4
|
9月前
|
算法 机器人 定位技术
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
536 4
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
410 3
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
387 0
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
581 0
|
10月前
|
监控 算法 安全
【多智能体博弈】拦截失控机器人:一种用于多追捕者捕获多个逃逸者的算法(Matlab代码实现)
【多智能体博弈】拦截失控机器人:一种用于多追捕者捕获多个逃逸者的算法(Matlab代码实现)
209 0
|
10月前
|
传感器 算法 安全
【路径规划】基于matlab A_Star结合DWA算法电气设备巡检机器人路径规划研究(Matlab代码实现)
【路径规划】基于matlab A_Star结合DWA算法电气设备巡检机器人路径规划研究(Matlab代码实现)
260 0