地址:

1536. 排布二进制网格的最少交换次数

状态:AC

代码:

  1. class Solution {
  2. public:
  3. int minSwaps(vector<vector<int>>& grid) {
  4. int n = grid.size();
  5. int raw;
  6. int ans = 0;
  7. vector<int> arr(n,0);
  8. for(int i = 0;i<n;i++){
  9. raw = 0;
  10. for(int j = n-1;j>=0;j--){
  11. if(grid[i][j] == 0){
  12. raw++;
  13. }else{
  14. break;
  15. }
  16. }
  17. arr[i] = raw;
  18. }
  19. for(int i = 0;i<n;i++){
  20. if(arr[i] >= n-1-i) continue;
  21. int j;
  22. for(j = i+1;j<n;j++){
  23. if(j == n-1 && arr[j] < n-1-i)
  24. return -1;
  25. if(arr[j] >= n-1-i)
  26. break;
  27. }
  28. for(;j>i;j--){
  29. swap(arr[j],arr[j-1]);
  30. ans++;
  31. }
  32. }
  33. return ans;
  34. }
  35. };