[Swift]LeetCode1020. 飞地的数量 | Number of Enclaves

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: https://www.cnblogs.com/strengthen/p/10634516.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Given a 2D array A, each cell is 0 (representing sea) or 1 (representing land)

A move consists of walking from one land square 4-directionally to another land square, or off the boundary of the grid.

Return the number of land squares in the grid for which we cannot walk off the boundary of the grid in any number of moves. 

Example 1:

Input: [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
Output: 3
Explanation: 
There are three 1s that are enclosed by 0s, and one 1 that isn't enclosed because its on the boundary.

Example 2:

Input: [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
Output: 0
Explanation: 
All 1s are either on the boundary or can reach the boundary. 

Note:

  1. 1 <= A.length <= 500
  2. 1 <= A[i].length <= 500
  3. 0 <= A[i][j] <= 1
  4. All rows have the same size.

给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地)。

移动是指在陆地上从一个地方走到另一个地方(朝四个方向之一)或离开网格的边界。

返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。 

示例 1:

输入:[[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
输出:3
解释: 
有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。

示例 2:

输入:[[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
输出:0
解释:
所有 1 都在边界上或可以到达边界。 

提示:

  1. 1 <= A.length <= 500
  2. 1 <= A[i].length <= 500
  3. 0 <= A[i][j] <= 1
  4. 所有行的大小都相同

432ms
 1 class Solution {
 2     func numEnclaves(_ A: [[Int]]) -> Int {
 3         var grid = A
 4         for row in 0..<grid.count {
 5             dfs(&grid, row, 0)
 6             dfs(&grid, row, grid[0].count - 1)
 7         }
 8         
 9         if grid.count > 0 && grid[0].count > 0 {
10             for col in 0..<grid[0].count {
11                 dfs(&grid, 0, col)
12                 dfs(&grid, grid.count - 1, col)
13             }
14         }
15         
16         var result = 0
17         for row in 0..<grid.count {
18             for col in 0..<grid[0].count {
19                 result += grid[row][col]
20             }
21         }
22         return result
23     }
24     
25     func dfs(_ grid: inout [[Int]], _ row: Int, _ col: Int) {
26         if grid.count == 0 || grid[0].count == 0 {
27             return 
28         }
29         if row < 0 || row > grid.count - 1 
30             || col < 0 || col > grid[0].count - 1 {
31             return 
32         }
33         
34         if grid[row][col] == 0 {
35             return
36         }
37         
38         grid[row][col] = 0
39         
40         dfs(&grid, row + 1, col);
41         dfs(&grid, row - 1, col);
42         dfs(&grid, row, col + 1);
43         dfs(&grid, row, col - 1);
44     }
45 }

444ms

 1 class Solution {
 2     func numEnclaves(_ A: [[Int]]) -> Int {
 3         guard A.count > 0 else { return 0 }
 4         guard A[0].count > 0 else { return 0 }
 5         
 6         let h = A.count
 7         let w = A[0].count
 8         
 9         var visited = Array(repeating: Array(repeating: false, count: w), count: h)
10         var queue = [(Int, Int)]()
11         for i in 0..<h {
12             if A[i][0] == 1 {
13                 queue.append((i, 0))
14                 visited[i][0] = true
15             }
16             
17             if w != 1 && A[i][w - 1] == 1 {
18                 queue.append((i, w - 1))
19                 visited[i][w - 1] = true
20             }
21         }
22         
23         for j in 0..<w {
24             if A[0][j] == 1 {
25                 queue.append((0, j))
26                 visited[0][j] = true
27             }
28             
29             if h != 1 && A[h - 1][j] == 1 {
30                 queue.append((h - 1, j))
31                 visited[h - 1][j] = true
32             }
33         }
34         
35         while queue.count > 0 {
36             var nextQueue = [(Int, Int)]()
37             for point in queue {
38                 let row = point.0
39                 let col = point.1
40                 
41                 if row - 1 >= 0 && A[row - 1][col] == 1 && !visited[row - 1][col] {
42                     visited[row - 1][col] = true
43                     nextQueue.append((row - 1, col))
44                 }
45                 
46                 if row + 1 < h && A[row + 1][col] == 1 && !visited[row + 1][col] {
47                     visited[row + 1][col] = true
48                     nextQueue.append((row + 1, col))
49                 }
50                 
51                 if col - 1 >= 0 && A[row][col - 1] == 1 && !visited[row][col - 1] {
52                     visited[row][col - 1] = true
53                     nextQueue.append((row, col - 1))
54                 }
55                 
56                 if col + 1 < w && A[row][col + 1] == 1 && !visited[row][col + 1] {
57                     visited[row][col + 1] = true
58                     nextQueue.append((row, col + 1))
59                 }
60             }
61             queue = nextQueue
62         }
63         
64         var count = 0
65         
66         for i in 0..<h {
67             for j in 0..<w {
68                 if A[i][j] == 1 && !visited[i][j] {
69                     count += 1
70                 }
71             }
72         }
73         
74         return count
75     }
76 }

452ms

 1 class Solution {
 2         var sum = 0
 3         var ovSum = 0
 4    
 5     func numEnclaves(_ A: [[Int]]) -> Int {
 6         var a = A
 7         
 8         var rowInd = 0
 9         var colInd = 0
10          print(ovSum, sum)
11         rowInd = 0
12         while rowInd < A.count {
13             defer { rowInd += 1 }
14             colInd = 0
15             while colInd < A[rowInd].count {
16                 defer { colInd += 1 }
17                  if a[rowInd][colInd] == 1 {
18                      ovSum += 1
19                  }
20               }
21         }
22         
23          for i in (0..<A.count) {
24             if a[i][0] == 1 { dfs(&a, i, 0)  }
25             if a[i][A[0].count-1] == 1 { dfs(&a, i, A[0].count-1)}
26             
27         }
28        for i in (0..<A[0].count) {
29             if a[0][i] == 1 { dfs(&a, 0, i) }
30             if a[A.count-1][i] == 1 { dfs(&a, A.count-1, i) }
31             
32         }
33         
34         print(ovSum, sum)
35         return ovSum - sum
36     }
37     
38     func dfs(_ a: inout [[Int]], _ rowInd: Int, _ colInd: Int) {
39         guard rowInd < a.count, colInd < a[0].count, rowInd >= 0, colInd >= 0 else { return }
40                if a[rowInd][colInd] != 1 { return }               
41                 a[rowInd][colInd] = 2; sum += 1               
42                     dfs(&a, rowInd - 1, colInd)
43                     dfs(&a, rowInd + 1, colInd)                  
44                     dfs(&a, rowInd, colInd - 1)
45                     dfs(&a, rowInd, colInd + 1)                       
46     }
47 }

Runtime: 488 ms
Memory Usage: 19.1 MB
 1 class Solution {
 2     var DR:[Int] = [-1, 0, +1, 0]
 3     var DC:[Int] = [0, +1, 0, -1]
 4     var R:Int = 0
 5     var C:Int = 0
 6     var grid:[[Int]] = [[Int]]()
 7     var visited:[[Bool]] = [[Bool]](repeating:[Bool](repeating:false,count:505),count:505)
 8     
 9     func numEnclaves(_ A: [[Int]]) -> Int {
10         grid = A
11         R = grid.count
12         C = grid[0].count
13         
14         for r in 0..<R
15         {
16             for c in 0..<C
17             {
18                 if r == 0 || r == R - 1 || c == 0 || c == C - 1
19                 {
20                     if grid[r][c] == 1 && !visited[r][c]
21                     {
22                         dfs(r, c)
23                     }
24                 }
25             }
26         }
27         var ans:Int = 0
28         for r in 0..<R
29         {
30             for c in 0..<C
31             {
32                 if grid[r][c] == 1 && !visited[r][c]
33                 {
34                     ans += 1
35                 }
36             }
37         }
38         return ans     
39     }
40     
41     func dfs(_ r:Int,_ c:Int)
42     {
43         visited[r][c] = true
44         for dir in 0..<4
45         {
46             var nr:Int = r + DR[dir]
47             var nc:Int = c + DC[dir]
48             if nr >= 0 && nr < R && nc >= 0 && nc < C
49             {
50                 if grid[nr][nc] == 1 && !visited[nr][nc]
51                 {
52                     dfs(nr, nc)
53                 }
54             }
55         }
56     }
57 }

524ms

 1 class Solution 
 2 {
 3     func numEnclaves(_ A: [[Int]]) -> Int 
 4     {
 5         guard A.count > 0  else { return 0 }
 6         
 7         var m = A
 8         var ret = 0
 9         for r in 0..<m.count
10         {
11             for c in 0..<m[r].count
12             {
13                 var temp = 0
14                 self.dfs(r,c, &m, &temp)
15                 if temp != -1 { ret += temp}
16             }
17         }
18         
19         return ret
20     }
21     
22     // checked: -1
23     private func dfs(_ r: Int, _ c: Int, _ m: inout [[Int]], _ count: inout Int)
24     {
25         guard r >= 0, c >= 0, r < m.count, c < m[r].count, m[r][c] != -1 else { return }
26         
27         if m[r][c] == 0 { 
28             m[r][c] = -1
29             return 
30         }
31         
32         if r == 0 || c == 0 || r == m.count - 1 || c == m[r].count - 1 { count = -1 }
33         if count != -1 { count += 1 }
34         m[r][c] = -1
35         // up
36         if r > 0 { self.dfs(r - 1, c, &m, &count) }
37         // down
38         if r < m.count - 1 { self.dfs(r + 1, c, &m, &count) }
39         // left
40         if c > 0 { self.dfs(r, c - 1, &m, &count) }
41         // right
42         if c < m[r].count - 1 { self.dfs(r, c + 1, &m, &count) }
43     }
44 }

 

转载于:https://www.cnblogs.com/strengthen/p/10634516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐30个新鲜出炉的精美 jQuery 效果

jQuery 是最流行和使用最广泛的 JavaScript 框架&#xff0c;它简化了HTML文档遍历&#xff0c;事件处理&#xff0c;动画以及Ajax交互&#xff0c;帮助Web开发人员更快速的实现各种精美的界面效果。jQuery 的易扩展性吸引了来自全球的开发者来共同编写 jQuery 插件&#xff0c…

Java常见陷阱

总览 Java是一种极简主义的语言&#xff0c;具有比其他语言故意更少的功能&#xff0c;尽管如此&#xff0c;Java仍然具有产生奇怪效果的边缘情况&#xff0c;甚至具有令人惊讶的效果的一些常见情况也会使您轻而易举。 如果您习惯于阅读另一种语言&#xff0c;则可以轻松地以错…

python高阶函数介绍_python高级特性和高阶函数及使用详解

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

会计专业计算机技能大赛,会计技能大赛策划

会计技能大赛策划一&#xff0e;活动背景会计是一个基于理论和实践相结合的学科&#xff0c;对于经管学院&#xff0c;会计专业是一个新创建的专业&#xff0c;缺少相应的会计实践。作为会计专业的学生&#xff0c;在不断学习理论的同时&#xff0c;我们更应该加强实践操作能力…

MySQL中查询获取每个班级成绩前三名的学生信息

CREATE TABLE t_testscore( pk_id INT PRIMARY KEY, c_name VARCHAR(50) , c_score INT, c_class INT )DEFAULT CHARSETutf8;INSERT INTO t_testscore VALUES (1, 张三6, 66, 1),(2, 张三5, 65, 1),(3, 张三4, 64, 1), (4, 张三3, 63, 1),(5, 张三2, 62, 1);INSERT…

vue自定义指令clickoutside扩展--多个元素的并集作为inside

都是个人理解&#xff0c;如果发现错误&#xff0c;恳请大家批评指正&#xff0c;谢谢。还有我说的会比较啰嗦&#xff0c;因为是以自身菜鸡水平的视角来记录学习理解的过程&#xff0c;见谅。 1.前言 产品使用vueelement作为前端框架。在功能开发过程中&#xff0c;难免遇到使…

35个让人惊讶的 CSS3 动画效果演示

本文收集了35个惊人的 CSS3 动画演示&#xff0c;它们将证明 CSS3 Transform 和 Transition 属性的强大能力。CSS 是网页设计非常重要的一部分&#xff0c;随着越来越多的浏览器对 CSS3 支持的不断完善&#xff0c;设计师和开发者们有了更多的选择。如今&#xff0c;用纯 CSS 就…

可选类型API

Java 8引入了Optional类。 简而言之&#xff0c;不是返回null&#xff0c;而是检查null&#xff0c;而是返回Optional实例&#xff0c;该实例可以设置或不设置值。 这样&#xff0c;您就不会因NullPointerException而失败。 我不会讨论Optional类型是否会完全消除NPE&#xff…

计算机社团活动丰富多彩,描写社团丰富多彩的句子

我们学校的社团活动真是丰富多彩用这个句子开头试着写一段话感恩生命&#xff0c;感谢她给予我们丰富的感情。喜怒哀乐&#xff0c;悲思忧惧&#xff0c;洒洒脱脱&#xff0c;原原本本&#xff0c;痛快淋漓&#xff0c;无拘无束&#xff1b;喜而笑&#xff0c;怒而吼&#xff0…

宝元系统u盘使用说明_教你如何使用U盘安装电脑系统

①到老毛桃官网首页下载老毛桃UEFI版u盘启动盘制作工具安装到电脑上&#xff1b;②准备一个容量在4G以上并能够正常使用的u盘。1第一步将u盘插入电脑usb接口&#xff0c;程序会自动扫描&#xff0c;我们只需在下拉列表中选择用于制作的u盘&#xff0c;然后点击“一键制作”按钮…

IP通信基础 4月1日

广域网数据链路控制规程 1.面向字符型传输规程 2.面向比特型传输规程 面向比特型传输规程分析 帧 标志字段F 地址字段A 控制字段C 信息字段TNFO 帧检验序列FCS 标志字段F 1Byte 1Byte 1Byte 可变长 2Byte 1Byte…

输入人民币/美元后自动判断,输出转换后相对应的值

1 2 作者&#xff1a;pasaulis3 版本&#xff1a;v2.04 日期&#xff1a;2018.11.75 功能&#xff1a;输入人民币/美元后自动判断&#xff0c;输出转换后相对应的值6 7 in_str_valueinput(请输入人民币/美元金额&#xff08;格式示例&#xff1a;100rmb/100usd&#xff09;)9 u…

支持在iPad中播放的HTML5视频网站推荐

YouTube是最早支持HTML5视频的网站&#xff0c;随着iPad等平板电脑的流行&#xff0c;越来越多的视频网站开始支持HTML5视频播放。下面就向大家分享一些国内的HTML5视频网站&#xff0c;是根据网上信息整理而成&#xff0c;欢迎大家反馈和推荐更多的HTML5视频网站。 腾讯 优酷…

自定义Log4j 2.0

我们越来越接近Log4j 2 GA版本&#xff0c;因此&#xff0c;我们应该开始研究它会给我们带来什么。 我个人有很多理由对Log4j 2.0感到兴奋。 社区很棒&#xff0c;Apache许可证给了我很多自由&#xff0c;最后它受到Apache软件基金会的保护。 嘿&#xff0c;这是一个很棒的软件…

计算机斐波那流程图,循环结构——斐波那契数列.DOC

循环结构——斐波那契数列循环结构——斐波那契数列1&#xff0e;教学目标根据新课标的要求和学生的认知特点&#xff0c;确定本节课的教学目标。(1)知识与技能学生能理解循环结构概念&#xff1b;把握循环结构的三要素&#xff1a;循环的初始状态、循环体、循环的终止条件&…

为什么用链路聚合_H3C ComwareV7平台网络设备可靠性配置——链路聚合

H3C ComwareV7平台网络设备可靠性配置——链路聚合链路聚合简介&#xff1a;链路聚合是通过多个物理接口(通常指以太网接口&#xff0c;串口只在特定场景且与以太网聚合技术等同故不再赘述)捆绑实现的逻辑接口&#xff0c;而这些被捆绑在一起的以太网接口就称为该聚合组的成员端…

用php实现一个双向队列

队列是一种线性表&#xff0c;按照先进先出的原则进行 单向队列&#xff1a;只能从头进&#xff0c;从尾出 双向队列&#xff1a;头尾都可以进出 class DuiLie { private $array array();//声明空数组 public function setFirst($item){ //array_unshift() 函数用于向数组插入…

idea+maven+ssm搭建boot_crm项目遇到的问题

使用ideamavenssm搭建一个boot_crm项目&#xff0c;遇到的问题如下&#xff1a; 1.环境搭建好了&#xff0c;相关配置文件都配置好了&#xff0c;也部署到了tomcat&#xff0c;但是无法启动首页。 通过百度&#xff0c;google找到了&#xff0c;原因是web.xml文件出了问题&…

大型计算机变形,计算机变形病毒的主要特征和发展趋势

计算机变形病毒的主要特征和发展趋势计算机病毒具有一些基本的特性&#xff0c;这些基本特性主要指的是病毒的传染性、破坏性、恶作剧等&#xff0c;这是普通病毒所具备的基本特性&#xff0c;而能用变化自身代码和形状来对抗反病毒手段的变形病毒才是下一代病毒首要的基本特征…

Redis与Jedis排序

在本文中&#xff0c;我们将讨论Redis SORT命令。 Redis提供了SORT命令&#xff0c;我们可以使用该命令从LIST&#xff0c;SET或ZSET中检索或存储排序的值。 我们可以使用最简单的形式在KEY上使用命令&#xff0c;如下例所示&#xff1a; SORT numbers_list这将对键中包含的…