检查是否可以通过Python上的三个操作将数组和设为K

假设我们有一个称为nums的数字列表,并且还有一个正值K。我们可以对nums进行这三个操作中的任何一个-

  • 将一个数字设为负数

  • 将数字的索引(从索引1开始)添加到数字本身

  • 从数字本身减去数字的索引。

最后,通过对每个元素仅执行一次这些操作,我们必须检查给定数组是否可以在数组的总和变为k时进行转换。

因此,如果输入像nums = [1,2,3,7] k = 8,则输出将为True,因为我们可以从2和3中减去2和3的索引,以使数组成为[1,0, 0,7],因此总和为8 = k。

为了解决这个问题,我们将遵循以下步骤-

  • 大小:= 100

  • 定义功能 is_ok()。这将需要i,total,k,nums,table

  • n:= nums的大小

  • 如果合计<= 0,则

    • 返回False

  • 如果i> = n,则

    • 返回True

    • 如果总数等于k,则

  • 返回False

  • 如果table [i,total]不为-1,则

    • 返回表[i,总计]

  • table [i,total]:= 1,当(is_ok(i + 1,total-2 * nums [i],k,nums,table)为非零或is_ok(i + 1,total,k,nums,table )非零),否则为0

  • table [i,total]:= 1(is_ok(i + 1,total-(i + 1),k,nums,table)或table [i,total]),否则为0

  • table [i,total]:= 1(is_ok(i + 1,total + i + 1,k,nums,table)或table [i,total]),否则为0

  • 返回表[i,总计]

  • 从主要方法中执行以下操作-

  • 总计:=所有元素的总和

  • table:=长度与大小相同的数组,并用-1填充

  • 对于介于0到大小范围内的i,执行

    • table [i]:=长度与大小相同的数组,并用-1填充

  • 返回is_ok(0,total,k,nums,table)

让我们看下面的实现以更好地理解-

示例

size = 100
def is_ok(i, total, k, nums, table):
   n = len(nums)   if total <= 0:
      return False
   if i >= n:
      if total == k:
         return True
      return False
   if table[i][total] != -1:
      return table[i][total]
   table[i][total] = is_ok(i+1, total - 2 * nums[i], k, nums, table) or is_ok(i+1, total, k, nums, table)
   table[i][total] = is_ok(i+1, total - (i+1), k, nums, table) or table[i][total] table[i][total] = is_ok(i+1, total + i + 1, k, nums, table) or table[i][total]
   return table[i][total]
def solve(nums, k):
   total = sum(nums)   table = [-1]*size
   for i in range(size):
      table[i] = [-1]*size
   return is_ok(0, total, k, nums, table)
nums = [1,2,3,7]
k = 8
print(solve(nums, k))

输入值

[1,2,3,7], 8
输出结果
True

猜你喜欢