首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

剑指Offer_Java_顺时针打印矩阵(二维数组)

顺(逆)时针打印矩阵 算法思想: 简单来说,就是不断地收缩矩阵的边界 定义四个变量代表范围,up(初始0)、down(初始-行高)、left(初始-0)、right(初始-列宽), 向右走存入整行的值...交错; 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,同时判断是否和代表上边界的 up 交错; 向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的...、right 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错 向下走存入整列的值,...当存入后,该列再也不会被遍历,代表右边界的 right 减一,同时判断是否和代表左边界的 left 交错 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,...) { break; } //向左 for(int i

55030
您找到你想要的搜索结果了吗?
是的
没有找到

算法题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

题解+代码(Java和Python) 简单来说,就是不断地收缩矩阵的边界 定义四个变量代表范围,up、down、left、right 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up...加一,同时判断是否和代表下边界的 down 交错 向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,同时判断是否和代表左边界的 left 交错 向左走存入整行的值,...row=up;row<=down;row++){ list.add(matrix[row][right]); } // 向左逼近...]); } // 向右逼近 left++; // 判断是否越界 if(left >...for row in range(up,down+1): list.append(matrix[row][right]) # 向左逼近

79631

每日一题《剑指offer》数组篇之顺时针打印矩阵

<= matrix.length <= 100 0 <= matrix[i].length <= 100 举例 解题思路 简单来说,就是不断地收缩矩阵的边界 定义四个变量代表范围,up、down、left...、right 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错 向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right...减一,同时判断是否和代表左边界的 left 交错 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,同时判断是否和代表上边界的 up 交错 向上走存入整列的值,当存入后,...row=up;row<=down;row++){ list.add(matrix[row][right]); } // 向左逼近...]); } // 向右逼近 left++; // 判断是否越界 if(left >

12820

css常用布局

因为content是普通的块级元素,如果先执行content,就会占据一整行,aside就只能向下浮动。...因为content是普通的块级元素,如果先执行content,就会占据一整行,aside就只能向下浮动。...2、原理(浮动+负margin+绝对定位) 1、给main,aside,extra都设置为浮动,main设置宽度为100% 2、设置aside负margin-left为100%(相当于向左移动一个父元素的宽度...),将aside移动到main的左边 3、设置extra负margin-left为150px(extra的宽度),将extra移动到main的右边 4、为了避免main的内容被extra和aside遮挡...给content设置左padding为100px,右padding为150px,给extra和aside腾出位置 5、最后使用position:relative,将extra和aside分别移动到两边

1.2K11

bootstrap源码分析之Carousel

item的包裹住   1.3、圆圈指示符:用一个ol列表来显示其各图形列表项,每个列表项需要指定data-slide-to=”index”属性,用于标记当前圆圈的索引号   1.4、左右控制按钮:实现向左...、向右移动的功能 2、Css样式   2.1、Carousel:只有一个相对定位标记   2.2、Carousel-inner:旋转图片列表区域,其中每项有item来修饰    2.2.1、其中的active...,否则直接加css来切换     3.1.7、动画切换原理:       3.1.7.1、Prev:是向右滚动图片,会组合出的样式:active right(active项) prev right(下一项...),这时prev自身为-100%,把图片放在最左边       3.1.7.2、Next:是向左滚动图片 active left(active项)、next left(下一项),这时next自身为100%...,把图片放在最右边       3.1.7.3、Active right:图片应该是向右,那就应该运动图片宽度的100%       3.1.7.4、Active left:图片向左,那就应该运行图片宽度的

2K90

圣杯布局、双飞翼布局、Flex布局和绝对定位布局的几种经典布局的具体实现示例

200px; } .right { margin-left: -300px; background-color: red; width: 300px; }   负的margin-left会让元素沿文档流向左移动...设置left部分的margin-left为-100%,就会使left向左移动一整个行的宽度,由于left左边是父元素的边框,所以left继续跳到上一行左移,一直移动到上一行的开头,并覆盖了main部分(...6.接下来只要把left和right分别移动到这两个留白就可以了。可以使用相对定位移动 left和right部分。...,;双飞翼布局子div里用margin-left和margin-right共2个属性,比圣杯布局思路更直接和简洁一点。...4.通过项目属性flex-grow设置main的放大比例,将空余的空间用main来填充,使三个项目不满一整行;默认为0,也就是对剩余空间不做处理。

88520

快速排序填坑口诀

直接默写出快速排序还是有一定难度的,所以一定要弄清楚原理再去记忆不是去硬背。 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。...接下来从right指针开始,把指针所指向的元素和基准元素做比较,如果比pivot大,则right指针向左移动;如果比pivot小,则把所指向的元素放入index对应的位置。...同时right指针向左移动一位。...) { // right 指针从右向左进行移动,如果当前值小于基准值则将当前元素放到坑中, // 当前元素的位置变成新坑,left向右移动一个位置,切换到left...指针从左往右移动,如果当前值大于基准值则将当前元素放到坑中, // 当前元素变为新坑,right向左移动一个位置,切换到right进行比较, // 否则left

77210

1503. 所有蚂蚁掉下来前的最后一刻

一些蚂蚁在木板上移动,每只蚂蚁都以每秒一个单位的速度移动。其中,一部分蚂蚁向左移动,其他蚂蚁向右移动。 当两只向不同方向移动的蚂蚁在某个点相遇时,它们会同时改变移动方向并继续移动。...当蚂蚁在某一时刻 t 到达木板的一端时,它立即从木板上掉下来。 给你一个整数 n 和两个整数数组 left 以及 right 。两个数组分别标识向左或者向右移动的蚂蚁在 t = 0 时的位置。...-下标 1 处的蚂蚁命名为 B 并向右移动。 -下标 3 处的蚂蚁命名为 C 并向左移动。 -下标 4 处的蚂蚁命名为 D 并向左移动。...示例3 [image.png] 输入:n = 7, left = [0,1,2,3,4,5,6,7], right = [] 输出:7 解释:所有蚂蚁都向左移动,下标为 7 的蚂蚁需要 7 秒才能从木板上掉落...示例5 输入:n = 6, left = [6], right = [0] 输出:6 思路 两个蚂蚁相撞之后会互相调头,其实只要想成如果每只蚂蚁都长得一模一样,那么是不是蚂蚁碰撞的调头 就等于

1.2K30

用JavaScript实现二叉搜索树

通过这种方式,在二叉搜索树中查找值变得非常简单,只要你要查找的值小于正在处理的节点则向左,如果值更大,则向右移动。二叉搜索树中不能有重复项,因为重复会破坏这种关系。下图表示一个简单的二叉搜索树。...所以你只需访问三个不是九个节点来查找这个值。 要在 JavaScript 中实现二叉搜索树,第一步要先定义基本接口: function BinarySearchTree() { this....遍历树遵循前面讨论的简单算法:如果要查找的值小于当前节点则向左移动,如果值更大则向右移动。...主要区别在于你要寻找放置新值的位置,不是在树中查找值: BinarySearchTree.prototype = { //more code add: function(value...注意,如果当前节点存在,则递归左右移动(以避免多次处理 null )。然后 traverse() 方法从根节点开始按顺序遍历,process() 函数处理每个节点。

59110

Vim高手,从来不用鼠标2——替换、撤销、缩进、查找

vim 替换、撤销、缩进、查找 上一次我们掌握了移动、跳转、定位、操作(删除、复制、粘贴),基本使用vim脱离鼠标完全是可以做到的了。...速记如下: 移动: h,l,j,k,w,b 跳转:G nG f/F+字母 定位:G代表尽头, $代表行尾,^代表行首,w代表下一个单词,b上一个单词,e当前单词末尾 操作:y d p 替换和撤销(Undo...快速缩进 快速缩进在编辑代码时极其有用,快速调整代码缩进非常的爽,缩进操作均在普通模式下有效 使用命令进行快速调整缩进操作 >> 整行将向右缩进 ? << 整行向左回退 ?...调整文本位置 命令行模式下输入:le(left)命令使本行内容靠左 :le 命令行模式下输入:ce(center)命令使本行内容居中 :ce 命令行模式下输入:ri(right)命令使本行文本靠右 :ri...是向上 / 是向下查找。 :noh退出查找模式 ? 高级查找 普通模式下输入\*寻找游标所在处的单词 普通模式下输入\#同上,但 \#是向前(上)找,\*则是向后(下)找 ?

1.1K10

没想到还能用这种方式学 Vim!

Vim 的名词和动词 这里说到的Nouns,就是 Vim 中的一些动作,例如: h:左 j:下 k:上 l:右 w:移动到下个词的开头 }:跳到下一个段 $:移动到本行末尾 Vim 中的 Verbs...语法规则」中了: y$:把当前所有的东西,从当前位置拖拽至行末 dw:从当前位置删除到下一个单词的开头 c}:将当前位置更改为此段末尾 当然,类似这样的组合,也接受数字作为其中的参数,例如: y2h:向左拉...比如,键入「dd」,删除整行内容;键入「cc」,更改整行内容。 可组合性和语法 在讨论 Vim 语法之后,便是 Vim 的可组合性(Composability)。...最基本的操作便是向左、向右、向上和向下移动一个字符: h Left j Down k Up l Right 在字符之后,便是以文字为单元的移动。...W:移动到下一个单词的开头处 E:移动到下一个单词的结尾处 B:移动到前一个单词的开头处 gE:移动到前一个单词的结尾处 接下来是以「行」为单位的移动: 0:移动到当前行的第一个字符处 ^:移动到当前行第一个非空字符处

60120

线索化二叉树

左移至最左边,判定left为空时将临时节点指向当前node节点的左指针 处理右节点时是在下一次,此时node为下一个节点,temp则指向上一轮的node节点。...然后将temp指向的right节点连接到node(也就是当前节点) temp节点,让其始终跟在node节点的后面(node节点递归移动向左右分别递归移动当前节点 线索化遍历思路 ​ 根左右,所以从根节点开始...向左递归移动当前节点 判定left为空时将临时节点指向当前node节点的左指针 处理右节点时是在下一次,此时node为下一个节点,temp则指向上一轮的node节点。...向左递归移动当前节点 向右递归移动当前节点 判定left为空时将临时节点指向当前node节点的左指针 处理右节点时是在下一次,此时node为下一个节点,temp则指向上一轮的node节点。...后序的遍历顺序是:左右根,先找到最左子节点,沿着right后继指针处理,当right不是后继指针时,并且上一个处理节点是当前节点的右节点,则处理当前节点的右子树,遍历终止条件是:当前节点是root节点,

7210

IntelliJ IDEA 2021.2 中,您完全不需要鼠标的 10 种情况

在 IntelliJ IDEA 上,您是不是更喜欢使用键盘不是鼠标?如果答案是肯定的,那接下来的内容正好适合您!在这篇文章中,我们将向您展示 10 个不必在日常任务中使用鼠标的位置。 1....i) 使用 Alt+Right 或 Alt+Left 在最近处理的文件之间快速导航。不过,演示助手没有显示这一示例所用的快捷键。 此快捷键非常适于在最近使用过的文件之间导航,支持文件间的快速移动。...在 Project 工具窗口中,也可以使用类似的键盘快捷键 Ctrl+Right 和 Ctrl+Left(或 ⌘Left/⌘Right)向左或向右滚动目录结构。...如果类中有很多方法,您只想阅读部分方法的代码,那么可以先折叠所有方法,然后展开您想阅读的方法。您可以使用 Ctrl+Shift+Numpad –(或 ⇧⌘Numpad -)折叠所有方法。...您还可以选择性地展开几个代码块,改善代码可读性。 另一项实用操作是以 Alt+Down (⌃Down) 或 Alt+Up(或⌃Up)从一个方法声明跳转到另一个方法声明。

7210

用聪明的方式学习Vim,不再死记硬背,复杂命令一学就会 | GitHub 2200星

Vim 的名词和动词 这里说到的Nouns,就是 Vim 中的一些动作,例如: h:左 j:下 k:上 l:右 w:移动到下个词的开头 }:跳到下一个段 $:移动到本行末尾 Vim 中的 Verbs...语法规则」中了: y$:把当前所有的东西,从当前位置拖拽至行末 dw:从当前位置删除到下一个单词的开头 c}:将当前位置更改为此段末尾 当然,类似这样的组合,也接受数字作为其中的参数,例如: y2h:向左拉...比如,键入「dd」,删除整行内容;键入「cc」,更改整行内容。 可组合性和语法 在讨论 Vim 语法之后,便是 Vim 的可组合性(Composability)。...最基本的操作便是向左、向右、向上和向下移动一个字符: h Left j Down k Up l Right 在字符之后,便是以文字为单元的移动。...W:移动到下一个单词的开头处 E:移动到下一个单词的结尾处 B:移动到前一个单词的开头处 gE:移动到前一个单词的结尾处 接下来是以「行」为单位的移动: 0:移动到当前行的第一个字符处 ^:移动到当前行第一个非空字符处

62230

用聪明的方式学习Vim,复杂命令一学就会 | GitHub 2200星

Vim 的名词和动词 这里说到的Nouns,就是 Vim 中的一些动作,例如: h:左 j:下 k:上 l:右 w:移动到下个词的开头 }:跳到下一个段 $:移动到本行末尾 Vim 中的 Verbs...语法规则」中了: y$:把当前所有的东西,从当前位置拖拽至行末 dw:从当前位置删除到下一个单词的开头 c}:将当前位置更改为此段末尾 当然,类似这样的组合,也接受数字作为其中的参数,例如: y2h:向左拉...比如,键入「dd」,删除整行内容;键入「cc」,更改整行内容。 可组合性和语法 在讨论 Vim 语法之后,便是 Vim 的可组合性(Composability)。...最基本的操作便是向左、向右、向上和向下移动一个字符: h Left j Down k Up l Right 在字符之后,便是以文字为单元的移动。...W:移动到下一个单词的开头处 E:移动到下一个单词的结尾处 B:移动到前一个单词的开头处 gE:移动到前一个单词的结尾处 接下来是以「行」为单位的移动: 0:移动到当前行的第一个字符处 ^:移动到当前行第一个非空字符处

1.3K20

【Python基础】Jupyter Notebook & Lab快捷键大全

「命令模式 (按键 Esc 开启):」 可以用快捷键命令运行单元格,移动单元格,切换单元格编辑状态等等,此时的单元格被灰色的框线包围,且编辑模式下的快捷键不生效; ?...编辑模式快捷键 快捷键 作用 Esc 切换到命令模式 Ctrl-M 切换到命令模式 Tab 代码补全或缩进 Shift-Tab 提示 Ctrl-] 缩进 向右缩进 Ctrl-[ 解除缩进 向左缩进 Ctrl-A...撤销 Ctrl-Shift-Z 重做 Ctrl-Y 重做 Ctrl-Home 跳到单元开头 Ctrl-Up 跳到单元开头 Ctrl-End 跳到单元末尾 Ctrl-Down 跳到单元末尾 Ctrl-Left...按光标所在行进行分割 Ctrl-Shift-Subtract 分割单元 Ctrl-S 保存当前 NoteBook Shift 忽略 Up 光标上移或转入上一单元 Down 光标下移或转入下一单元 Ctrl-/ 注释整行.../撤销注释,代码状态有效 命令模式快捷键 快捷键 作用 Enter 转入编辑模式 Shift-Enter 运行本单元,选中下个单元 Ctrl-Enter 运行本单元 Alt-Enter 运行本单元,

12.8K31
领券