·1232 缀点成线
给定一个数组 coordinates ,其中 coordinates[i] = [x, y] , [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。
示例 1:
输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
输出:true
示例 2:
输入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
输出:false
·解题思路:
1.两个点则返回true
2.由前两个点构成直线,再判断是否再直线上。两种情况:
一种是,斜率不存在——那么就需要所有的横坐标都相同
斜率存在——求k,b,再判断是否在直线上。在求k的时候,涉及除法,要把除法中的除数或者被除数转换为浮点数,否则会遗失小数部分导致报错
·代码
class Solution(object):
def checkStraightLine(self, coordinates):
size = len(coordinates)
if size == 2:
return True
if coordinates[0][0] == coordinates[1][0]:
for j in range(2,size):
if coordinates[j][0] != coordinates[0][0]:
return False
else:
k = float((coordinates[0][1] - coordinates[1][1])) / (coordinates[0][0] - coordinates[1][0])
b = coordinates[0][1] - k * coordinates[0][0]
for j in range(2, size):
if coordinates[j][1] != k * coordinates[j][0] + b:
return False
return True