Lexi's Leetcode solutions

Posts Tagged ‘很多细节

这个题好像就没一次做对过。实在是,太绕了太绕了太绕了。二维数组的上下左右index能把人活活烦死。出现的多次失误:

  1. 只转了四个角(主要在于i的物理意义没弄清)
  2. 每个边转了整个长度而不是长度-1(这样四角就会一直转来转去)
  3. 没搞清left, right, up, bottom怎么用layer和index表示。一个检查写的对不对的方法:记住
    1. upper说明i不变(depend on constant layer), j在从小到大变动(从左往右)
    2. left说明j不变(一直是最小值,因为靠左),i在从大到小的变动(从下往上)
    3. bottom说明i不变(一直是最大的),j在从大到小变动(从右往左)
    4. right说明j不变(一直是最大的),i在从大到小变动(从上往下)
public void rotate(int[][] matrix) {
  int len = matrix[0].length;
  for (int layer = 0; layer < len / 2; layer++) {
    for (int i = layer; i < len - 1 - layer; i++) {
      // save upper
      int temp = matrix[layer][i];
      // upper = left
      matrix[layer][i] = matrix[len - 1 - i][layer];
      // left = bottom
      matrix[len - 1 - i][layer] = matrix[len - 1 - layer][len - 1 - i];
      // bottom = right
      matrix[len - 1 - layer][len - 1 - i] = matrix[i][len - 1 - layer];
      // right = up
      matrix[i][len - 1 - layer] = temp;
    }
  }
}

十月份重做,还是没做出来。不知道为什么大家都觉得这个题简单,我个人认为这是CC150最难的3道题之一。别的难题都是理解了下次就做出来了,这题是理解了再做5遍还是做不出来。
和spiral matrix的区别:那道题是大大卷那种,spiral的,这个是一层一层的,上一层和这一层没关系。

Advertisements