kotlin刷题总结(4)dfs bfs

此系列是我用kotlin二刷leetcode写的总结,会总结用各个方法做的题目以及心得,主要是剑指offer专栏的题目

dfs bfs

第一题剑指offer13
思路:一般的dfs遍历就可以,注意kotlin的数组初始化方式,此处用了kotlin的自定义操作符,定义了Point类重写了+的方法,可以实现求出数字在题目中的数值
细节:此处注意,定义机器人可以前往的点的时候一定要定义上下左右四个方向的点,不然在16,8,4的例子会出现有一块区域机器人去不了,如果在之前加入了所有的点就会产生错误的答案
代码:

class jz_offer_13 {
   var res=0
   fun movingCount(m: Int, n: Int, k: Int): Int {
      val check=Array(n){i -> Array(m,{0}) }
       goNext(0,0,n,m,k,check)
       return res
   }
   fun goNext(x:Int,y:Int,height:Int,width:Int,k:Int,check:Array<Array<Int>>){
       if(x==width||y==height||x<0||y<0||check[y][x]==1)return
       check[y][x]=1
       var sum= Point(x) + Point(y)
     if(sum>k)return
       res++
       val steps=getNext(x,y)
       steps.forEach { goNext(x+it[0],y+it[1],height,width,k,check) }
   }
   fun getNext(x:Int,y:Int):Array<Array<Int>>{
       val moving= arrayOf(arrayOf(1,0), arrayOf(0,1), arrayOf(-1,0), arrayOf(0,-1))
       return moving
   }
   class Point(val num: Int){
       var x:Int = 0
           get() {
               var num0=this.num
               var value:Int=0
               while (num0>=10) {
                   value+=num0/10
                   num0%=10
               }
               value+=num0
               return value
           }
       operator fun plus(other: Point):Int{
           return other.x+this.x
       }
   }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容