leetcode1006-笨阶乘

题目描述

  • 计算“变种阶乘”,符号顺序为 * / + - ...,如 f(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1

示例

输入:4
输出:7
解释:7 = 4 * 3 / 2 + 1
输入:10
输出:12
解释:12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1

题解

  • 思路:多写两位,找下规律,模拟即可
func clumsy(n int) int {
    // (14 * 13 / 12) + 11 - (10 * 9 / 8) + 7 - (6 * 5 / 4) + 3 - (2 * 1)
    if n <= 2 { return n }

    res := 0
    for i := n; i >= 1; i -= 4 {
        if i <= 2 {
            res -= i
            break
        }

        t := i * (i - 1) / (i - 2)
        if i == n { res += t
        } else { res -= t }
        res += i - 3
    }
    return res
}
posted @ 2025-08-24 19:15  余越  阅读(10)  评论(0)    收藏  举报