Archive for the ‘CC150’ Category
- In: CC150 | leetcode
- Leave a Comment
这个题好像就没一次做对过。实在是,太绕了太绕了太绕了。二维数组的上下左右index能把人活活烦死。出现的多次失误:
- 只转了四个角(主要在于i的物理意义没弄清)
- 每个边转了整个长度而不是长度-1(这样四角就会一直转来转去)
- 没搞清left, right, up, bottom怎么用layer和index表示。一个检查写的对不对的方法:记住
- upper说明i不变(depend on constant layer), j在从小到大变动(从左往右)
- left说明j不变(一直是最小值,因为靠左),i在从大到小的变动(从下往上)
- bottom说明i不变(一直是最大的),j在从大到小变动(从右往左)
- 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的,这个是一层一层的,上一层和这一层没关系。