You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何生成连续整数向量的所有唯一连续元素字符串组合

需求说明

现有元素取值为0-9的整数向量,需要提取所有由向量连续元素构成的唯一组合,组合需要包含原始单个元素,排除非连续元素拼接的结果。
以示例向量vec <- 0:9为例,合法输出包括"0"、"01"、"012"…"0123456789"、"1"、"12"…"123456789"这类连续拼接结果,"013"这类跳选元素的结果不属于目标输出。
示例输入代码:

> vec <- 0:9
> vec
 [1] 0 1 2 3 4 5 6 7 8 9
实现方案

基础R双循环实现(逻辑直观易读)

核心逻辑是枚举所有连续子段的起止位置,截取对应位置的元素拼接即可,不需要加载任何第三方包:

# 输入向量
vec <- 0:9
n <- length(vec)
result <- c()

# 遍历所有起始位置
for (i in 1:n) {
  # 遍历当前起始位置对应的所有结束位置
  for (j in i:n) {
    # 拼接连续段存入结果
    result <- c(result, paste0(vec[i:j], collapse = ""))
  }
}

如果需要返回整数格式的组合而非字符串,把拼接行替换为as.integer(paste0(vec[i:j], collapse = ""))即可。

向量化优化实现(适合长向量场景)

如果处理的向量长度较大,双层循环效率偏低,可以用内置embed函数做向量化提速:

vec <- 0:9
n <- length(vec)
result <- unlist(lapply(1:n, function(seg_len) {
  # 生成所有长度为seg_len的连续子段矩阵,调整列顺序后逐行拼接
  seg_mat <- embed(vec, seg_len)[, seg_len:1, drop = FALSE]
  apply(seg_mat, 1, paste0, collapse = "")
}))
结果校验

对于长度为n的向量,所有连续子段的总数固定为n*(n+1)/2,示例中长度为10的0:9向量最终会返回55个组合,不存在非连续拼接的冗余结果。

内容的提问来源于stack exchange,提问作者NorthNW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:39:05