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

如何编写方法:输入数字返回奇数前后加单连字符的合规字符串

Ruby实现奇数前后加连字符的方法

嘿,我来帮你搞定这个需求!咱们要写一个Ruby方法,接收数字后返回符合要求的字符串——每个奇数前后加连字符,但不能以连字符开头或结尾,也不能出现多个连字符连在一起的情况。

思路拆解

要满足这些规则,核心是要判断每个奇数的前后字符状态,避免多余的连字符:

  • 先把输入的数字转成字符串,方便逐个字符处理
  • 遍历每个字符时,要同时知道当前字符是不是奇数,以及前后相邻的字符是不是奇数
  • 只在「当前是奇数,且前一个不是奇数、且不是第一个字符」的时候加前置连字符
  • 只在「当前是奇数,且后一个不是奇数、且不是最后一个字符」的时候加后置连字符

完整代码实现

def hyphenate(number)
  num_str = number.to_s
  result = []
  
  num_str.chars.each_with_index do |char, index|
    current_is_odd = char.to_i.odd?
    prev_is_odd = index > 0 ? num_str[index-1].to_i.odd? : false
    next_is_odd = index < num_str.length - 1 ? num_str[index+1].to_i.odd? : false

    # 处理前置连字符:当前是奇数,前一个不是奇数,且不是第一个字符
    result << '-' if current_is_odd && !prev_is_odd && index != 0
    # 添加当前数字字符
    result << char
    # 处理后置连字符:当前是奇数,后一个不是奇数,且不是最后一个字符
    result << '-' if current_is_odd && !next_is_odd && index != num_str.length - 1
  end
  
  result.join
end

测试验证

运行示例输入:

hyphenate(132237847) # 返回 "1-3-22-3-7-84-7"

完全符合要求,不会出现首尾带连字符或者多个连字符的错误情况。

比如遇到相邻奇数的情况,比如hyphenate(112),会返回"11-2",而不是"1-1-2"或者"-11-2-",完美规避了规则禁止的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:58:47