枚举算法又称穷举法
它的基本思想是:
根据提出的问题枚举出所有可能的状态,并用问题给定的约束条件进行检验,判断那些状态是需要的,那些是不需要的,能够使得命题成立的状态,即为其解
它的结构是:
循环 + 判断语句
接下来就做个力扣题,体会一下:
给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。
如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。
0 <= i < j < k < arr.length
|arr[i] - arr[j]| <= a
|arr[j] - arr[k]| <= b
|arr[i] - arr[k]| <= c
其中 |x| 表示 x 的绝对值。 返回 好三元组的数量 。
示例:
输入:arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3
输出:4
解释:一共有 4 个好三元组:[(3,0,1), (3,0,1), (3,1,1), (0,1,1)] 。
解题思路:
这个思路很简单,就是将各种情况列举出来,然后进行逐个判断,若是有满足题中条件的,就将计数加1
废话不多说,直接上代码:
class Solution(object):
def countGoodTriplets(self, arr, a, b, c):
"""
:type arr: List[int]
:type a: int
:type b: int
:type c: int
:rtype: int
"""
# 记录满足条件的个数
res = 0
# 将每一种情况遍历出来
for i in range(len(arr)):
for j in range(i+1,len(arr)):
for k in range(j+1,len(arr)):
# 对每一种情况进行判断,若是有符合题意的,就将记录数加一
if i < j < k and abs(arr[i]-arr[j]) <= a\
and abs(arr[j]-arr[k]) <= b and abs(arr[i]-arr[k]) <= c:
res += 1
# 最后将满足条件的个数返回
return res
def main():
arr = [3, 0, 1, 1, 9, 7]
a,b,c = 7,2,3
solution = Solution()
res = solution.countGoodTriplets(arr,a,b,c)
print(res)
if __name__ == '__main__':
main()
运行结果为: