Leetcode——1232. 綴點成線
阿新 • • 發佈:2021-01-18
題目描述:
在一個 XY 座標系中有一些點,我們用陣列 coordinates 來分別記錄它們的座標,其中 coordinates[i] = [x, y] 表示橫座標為 x、縱座標為 y 的點。
請你來判斷,這些點是否在該座標系中屬於同一條直線上,是則返回 true,否則請返回 false。
題解:
由於本人未考慮除法的複雜性,所以用最直接的方法進行解題。首先判斷點集中是否用兩個點練成的線是與x軸平行的線,然後進行分類。第一類為點集中有與x軸平行的兩點,然後進行依次判斷其他的點是否滿足與點集中任意其他一點的連線與x軸平行,進行對結果的輸出;第二類即為沒有與x軸平行的兩點,此時採用的方法為“斜率法”,如果點集均在一條線上,那麼其中相鄰三點之間的斜率均相同。之前導致我一直WA的點就是該題目的介面是二維int型向量,但是我計算時雖然定義的是double型的k,卻沒有將進行計算的值進行轉化,導致了整型相除的錯誤結果。
程式碼:
class Solution {
public:
bool checkStraightLine(vector<vector<int>>& coordinates) {
int flag = 1;
int zero_flag = 0;
//找一下有沒有與x軸平行的
for(int i = 0;i < coordinates.size();i++){
for(int j = i+1; j < coordinates.size();j++){
if (coordinates[j][0] - coordinates[i][0] == 0){
zero_flag = 1;
break;
}}
if(zero_flag)
break;
}
//如果有跟x軸平行的,當其他的不平行是即不在一條直線
if(zero_flag){
int tag = 1;
for(int i = 0;i < coordinates.size ();i++){
for(int j = i+1;j<coordinates.size();j++){
if(coordinates[j][0] - coordinates[i][0] !=0){
flag = 0;
tag = 0;
break;
}
}
if(!tag)
break;
}
}
else {
double k = (double(coordinates[1][1]) - coordinates[0][1]) / (double(coordinates[1][0]) - coordinates[0][0]);
for(int i = 0;i<coordinates.size()-1;i++){
if(((double(coordinates[i+1][1]) - coordinates[i][1]) / (double(coordinates[i+1][0]) - coordinates[i][0])) != k){
flag = 0;
break;
}
}
}
return flag;
}
};
這些部落格作為自己的成長史,記錄一下自己的進步與缺點。
很有意思的事請:
在找之前提到的資料型別錯誤的時候,我並沒有向此方面想,是在詢問朋友後再進行單步除錯才發現的這個錯誤,然後我向他說了一句這樣的話:
之後他回覆我:
哈哈哈我覺得很有道理。