Go语言实现连续数判断算法 - 支持万能数
以下是使用Go语言实现的连续数判断算法,支持万能数(万能数可以根据情况变成任意数字)。
package main
import "fmt"
func isContinuous(nums []int) bool {
n := len(nums)
if n != 3 && n != 5 {
return false
}
var wildcard int
for i := 0; i < n; i++ {
if nums[i] == 0x41 || nums[i] == 0x42 {
wildcard++
}
}
if n == 3 {
if wildcard >= 2 {
return true
}
for i := 0; i < n-1; i++ {
if nums[i+1]-nums[i] != 1 {
if wildcard > 0 && nums[i+1]-nums[i] == 2 {
wildcard--
} else {
return false
}
}
}
return true
} else { // n == 5
if wildcard >= 1 {
return true
}
for i := 0; i < n-1; i++ {
if nums[i+1]-nums[i] != 1 {
if wildcard > 0 && nums[i+1]-nums[i] == 2 {
wildcard--
} else if i < n-2 && nums[i+2]-nums[i] == 2 && nums[i+1] == 0x2E {
wildcard--
i++
} else {
return false
}
}
}
return true
}
}
func main() {
nums := []int{0x2, 0x3, 0x4, 0x5, 0x6}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0xE, 0xD}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0xE, 0x41}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0xE, 0x41, 0x43, 0x44}
fmt.Println(isContinuous(nums)) // false
nums = []int{0x2, 0x3, 0x4, 0x2E, 0x6}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0x3, 0x4, 0x2E, 0x42}
fmt.Println(isContinuous(nums)) // true
nums = []int{0x2, 0x3, 0x4, 0x2E, 0x41}
fmt.Println(isContinuous(nums)) // false
}
isContinuous 函数接受一个 []int 类型的参数 nums,判断其中的数是否连续。具体规则如下:
- 如果
nums中的数个数不为 3 或 5,则返回false。 - 如果
nums中有两个或两个以上的万能数,则返回true。 - 如果
nums中的数连续,则返回true。 - 如果
nums中的数不连续,但是可以通过万能数变成连续的数,则将万能数当做需要的数进行替换。 - 如果无法通过万能数变成连续的数,则返回
false。
该算法在判断连续性时,考虑了万能数的存在,并针对不同情况进行判断,使其能够更灵活地处理各种连续数判断问题。
原文地址: https://www.cveoy.top/t/topic/lImd 著作权归作者所有。请勿转载和采集!