给定一个数组 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
提示:
2 <= coordinates.length <= 1000
coordinates[i].length == 2
-10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
coordinates
中不含重复的点- 方法一:...没想到居然用时最少,,,,,,自己写的拉跨的一批
-
public class Solution { public bool CheckStraightLine(int[][] coordinates) { int len = coordinates.Length; if(len==2) return true; bool isX=false,isY=false; if(coordinates[1][0]==coordinates[0][0]) isY=true; else if(coordinates[1][1]==coordinates[0][1]) isX=true; for(int i=1;i<len-1;i++){ if(isX){ if(coordinates[i][1]!=coordinates[i+1][1]) return false; } else if(isY){ if(coordinates[i][0]!=coordinates[i+1][0]) return false; } else { if(coordinates[i+1][0]-coordinates[i][0]==0) return false; if(coordinates[i+1][1]-coordinates[i][1]==0) return false; if((coordinates[i][1]-coordinates[i-1][1])/(coordinates[i][0]-coordinates[i-1][0]) !=(coordinates[i+1][1]-coordinates[i][1])/(coordinates[i+1][0]-coordinates[i][0])) return false; } } return true; } }
方法二:
-
public class Solution { public bool CheckStraightLine(int[][] coordinates) { int len = coordinates.Length; if(len==2) return true; int iX=coordinates[1][0]-coordinates[0][0],iY=coordinates[1][1]-coordinates[0][1]; for(int i=2;i<len;i++){ int cX = coordinates[i][0] - coordinates[0][0], cY = coordinates[i][1] - coordinates[0][1]; if(cX*iY!=iX*cY) return false; } return true; } }