我有一个问题,我想看看字符串是否是一个增加1的序列。也就是说,任何2个连续数字之间的差异是1.字符串是折叠形式:
91011
89909192
18192123
其中前两个是字符串增加1但第三个不是。这是因为91010是9,10,11和89909192是89,90,91,92。然而18192123是18,19,21,23,所以差异大于1。
如何检查上述示例(以及一般情况下)中的每个字符串是否增加1或不使用R?
当然假设最大字符串长度为32,因此......
99999999999999989999999999999999
是连续数字增加1的最长字符串,因为我们有99999999999999998然后是9999999999999999,长度是2x16。
所以最糟糕的情况我们需要得到16个循环,但我不确定是否有更简单的方法,然后为16个循环中的每个循环添加一个序列和粘贴。
答案 0 :(得分:3)
您可以尝试使用递归函数:您获得第一个数字,尝试添加下一个数字,直到达到所需的长度,如果它不起作用,请再试一次,取前两个数字,依此类推:
cons_d <- function(str, nb=1) {
l_str <- nchar(str)
if(nb>=l_str) return("No") # if the number of digits you're trying is more than the length of strings then return "No"
n1 <- as.numeric(substr(str, 1, nb))
i <- 1
while(nchar(n2 <- paste(n1:(n1+i), collapse=""))<l_str) {i <- i+1}
if(n2==str) return("yes") else cons_d(str, nb+1) # if you get the right string, return yes, else, try again with one more digit
}
测试您的测试字符串:
cons_d("91011")
[1] "yes"
cons_d("89909192")
[1] "yes"
cons_d("18192123")
[1] "No"