题目地址:https://leetcode.com/problems/clumsy-factorial/

题目描述

Normally, the factorial of a positive integer n is the product of all positive integers less than or equal to n. For example, factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1.

Weinstead make a clumsy factorial: using the integers in decreasing order, we swap out the multiply operations for a fixed rotation of operations: multiply (*), divide (/), add (+) and subtract (-) in this order.

Forexample, clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1. However, these operations are still applied using the usual order of operations of arithmetic: we do all multiplication and division steps before any addition or subtraction steps, and multiplication and division steps are processed left to right.

Additionally, the division that we use is floor division such that 10 * 9 / 8 equals 11. This guarantees the result is an integer.

Implement the clumsy function as defined above: given an integer N, it returns the clumsy factorial of N.

Example 1:

Input: 4
Output: 7
Explanation: 7 = 4 * 3 / 2 + 1

Example 2:

Input: 10
Output: 12
Explanation: 12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1

Note:

1、 1<=N<=10000;
2、 -2^31<=answer<=2^31-1(Theanswerisguaranteedtofitwithina32-bitinteger.);

题目大意

常规的阶乘是从N到1各个数字连乘,但是这个题设计了一个新的函数:笨拙阶乘。做法是把N到1各个数字依次使用乘、除、加、减的循环进行连接。最终的结果也是按照普通的四则运算来做。求一个数的笨拙阶乘的结果是多少。

解题方法

直接eval

很惭愧,我作弊了,用的python的函数eval,直接表达式求值就可以了。

Python代码如下:

class Solution(object):
    def clumsy(self, N):
        """
        :type N: int
        :rtype: int
        """
        cl = ""
        ops = ["*", "/", "+", "-"]
        op = 0
        for n in range(N, 0, -1):
            if n != 1:
                cl += str(n) + ops[op % 4]
            else:
                cl += "1"
            op += 1
        return eval(cl)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

2022

DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有

本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发