栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode之回溯系列基础题目

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode之回溯系列基础题目

文章目录
  • leetcode之回溯系列基础题目
    • 1.打印从1到最大的n位数
      • 1.1暴力解法
      • 1.2回溯

leetcode之回溯系列基础题目 1.打印从1到最大的n位数 1.1暴力解法
func printNumbers(n int) []int {
	var res []int
	if n==0{
		return  res
	}
	max := 1
	for i :=1;i<=n;i++{
		max =max*10
	}
	max =max-1
	for i := 1; i <= max; i++ {
		res = append(res, i)
	}
	return res
}
//时间复杂度 O(10^n)

题目要求打印 “从 1至最大的 n 位数的列表” ,因此需考虑以下两个问题:
1.最大的 n位数(记为max)和位数 n 的关系: 例如最大的 1 位数是9 ,最大的 2 位数是 99 ,最大的 3位数是 999 。则可推出公式:
max= 10^n - 1
2.大数越界问题: 当 n 较大时,max 会超出 int32 整型的取值范围,超出取值范围的数字无法正常存储。但由于本题要求返回 int 类型数组,相当于默认所有数字都在 int32 整型取值范围内,因此不考虑大数越界问题。
因此,只需定义区间 [1, 10^n - 1],通过 forfor 循环生成结果列表 res 并返回即可。

1.2回溯
package main

import "fmt"

var res []string
var path string
var num []string = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}

func dfs(x, len int) {
	if x == len {
		s := path
		res = append(res, s)
	}
	var start int
	if x == 0 {
		start = 1
	}
	for i := start; i < 10; i++ {
		temp := path
		path = path + num[i]
		dfs(x+1, len)
		path = temp
	}

}

func printNumbers(n int) []string {
	for i := 1; i < n; i++ {
		dfs(0, i)
	}
	return res
}
func main() {
	fmt.Println(printNumbers(1))
}

面试时候是会考虑大数情况的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/822045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号