class Solution {
public:
vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) {
vector<vector<int>> res(R*C,vector<int>(3));//數組第三個位置存放兩點的曼哈頓距離
int num=0;
for(int i=0;i<C;i++)
{
for(int j=0;j<R;j++)
{
res[num][0]=j;
res[num][1]=i;
res[num][2]=abs(r0-j)+abs(c0-i);//曼哈頓距離
num++;
}
}
sort(res.begin(),res.end(),ismax);//排序
for(int i=0;i<num;i++)//將曼哈頓距離刪除
{
res[i].pop_back();
}
return res;
}
static bool ismax(vector<int> &a,vector<int> &b)//根據曼哈頓距離升序排序
{
return a[2]<b[2];
}
};
這是LeetCode1030的題 這裏指的學習的地方是將曼哈頓距離放在第三個位置,接着利用sort函數排序,sort函數的最後一個參數表示按所給定的函數的排序方式這是這道題的巧妙的地方 ,最後再將每個曼哈頓距離刪掉。