Golang实现输出所有唯一递增三位数字组合的问题求助
问题解决思路与修正代码
你的代码目前的循环逻辑存在问题:j从1开始、k从2起始的设定,会出现i >= j或j >= k的无效组合(比如i=1时j=1,直接违反了第二位大于第一位的要求);同时fmt.Println会把每个组合单独输出一行,完全没处理逗号分隔的格式。
下面针对你的三个需求逐一解决:
1. 确保组合唯一且符合i<j<k
直接调整循环的起始条件,让循环天然生成严格递增的三元组:
- 外层
i从0到7(要留两个比它大的数字,所以i最大为7,对应7<8<9) - 中间
j从i+1开始到8(j必须严格大于i,且留一个比j大的k) - 内层
k从j+1开始到9(k必须严格大于j)
这种循环逻辑下,生成的每个(i,j,k)都满足i<j<k,且所有组合必然唯一——严格递增的三个数字不可能出现重复组合。
2. 单行输出+逗号分隔
提供两种简洁实现方式:
方式一:先收集再拼接(清晰直观)
package main import ( "fmt" "strings" ) func main() { var combinations []string for i := 0; i <= 7; i++ { for j := i + 1; j <= 8; j++ { for k := j + 1; k <= 9; k++ { // 格式化为"012"这类字符串存入切片 combinations = append(combinations, fmt.Sprintf("%d%d%d", i, j, k)) } } } // 用", "拼接所有组合后一次性输出 fmt.Println(strings.Join(combinations, ", ")) }
方式二:边循环边输出(节省内存)
package main import "fmt" func main() { isFirst := true for i := 0; i <= 7; i++ { for j := i + 1; j <= 8; j++ { for k := j + 1; k <= 9; k++ { if isFirst { fmt.Printf("%d%d%d", i, j, k) isFirst = false } else { fmt.Printf(", %d%d%d", i, j, k) } } } } // 最后补个换行 fmt.Println() }
内容的提问来源于stack exchange,提问作者hdaasdjhksad
相关产品推荐
相关产品推荐

