当前位置: 首页 > news >正文

LeetCode -- 顺时针旋转图片90度

题目:给定二维数组,将其中每个点顺时针旋转90度。


思路:
得旋转公式:
找规律,取一些点,判断旋转前后的坐标关系,不难得出:
a[i,j]变成了a[n-j,i], a[n-j,i]变成了a[n-i,n-j],a[n-i,n-j]变成了a[j,n-i],a[j,n-i]变成了a[i,j]
定范围:

对于外循环,只需要旋转一半的长度就可以。可以想象把正方形上下平分,拿着另一半旋转3次,每次转90度,最后刚好对齐。 因此i ∈ [0,n/2]


对于内循环,要从将要旋转的元素为起始,旋转n-i-1次,其中n=总长度,i=已经旋转的个数。 因此j 属于[i, n-i)。可以想象一个正方形铁环,一圈一圈的缩小(对于同一个元素不能被重复旋转)


实现代码:







public class Solution {
    
 private static bool IsMatrix(int[,] matrix){
 	if(matrix == null){
		return false;
	}
	
	for(var i = 0;i < matrix.GetLength(0); i++){
		if(matrix.GetLength(1) != matrix.GetLength(0)){
			return false;
		}
	}
	
	return true;
 }
 // clock direction
 public void Rotate(int[,] matrix) 
 {
     if(!IsMatrix(matrix)){
	 	return;
	 }
	 
	 var n = matrix.GetLength(0) - 1;
	 for(var i = 0;i <= n/2 + 1 ;i ++){
	 	for(var j = i;j < n-i; j++){
			var t = matrix[i,j];
			matrix[i,j] = matrix[n-j,i];
			matrix[n-j,i] = matrix[n-i,n-j];
			matrix[n-i,n-j] = matrix[j,n-i];
			matrix[j,n-i] = t;
			
		}
		
	 }
 }
}


相关文章:

  • LeetCode -- Path Sum ||
  • 35岁IT“老人”的随笔
  • LeetCode -- Decode Ways
  • 嵌入式Linux系统中的GUI系统的研究与移植
  • LeetCode -- Substring with Concatenation of All Words
  • asp.net MVC5 sitemap 的使用
  • CentOS 5.x 預設啟動的服務簡易說明
  • Leet -- Remove Duplicates from Sorted Array
  • LeetCode -- Best Time to Buy and Sell Stock II
  • 海闊天空 信樂團
  • Contains Duplicate III
  • LeetCode -- Combination Sum
  • MySQL添加用户
  • LeetCode -- Candy
  • Leet -- Plus One
  • 【391天】每日项目总结系列128(2018.03.03)
  • 2017前端实习生面试总结
  • Android组件 - 收藏集 - 掘金
  • js操作时间(持续更新)
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Making An Indicator With Pure CSS
  • overflow: hidden IE7无效
  • PAT A1050
  • SegmentFault 2015 Top Rank
  • Vue.js-Day01
  • 阿里云购买磁盘后挂载
  • 服务器从安装到部署全过程(二)
  • 警报:线上事故之CountDownLatch的威力
  • 两列自适应布局方案整理
  • 前嗅ForeSpider教程:创建模板
  • 如何在GitHub上创建个人博客
  • 设计模式走一遍---观察者模式
  • 写代码的正确姿势
  • 用Visual Studio开发以太坊智能合约
  • 原生 js 实现移动端 Touch 滑动反弹
  • 源码安装memcached和php memcache扩展
  • 栈实现走出迷宫(C++)
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (rabbitmq的高级特性)消息可靠性
  • (搬运以学习)flask 上下文的实现
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Windows2003安全设置/维护
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 发展历程
  • .net 生成二级域名
  • .net 使用ajax控件后如何调用前端脚本
  • .net打印*三角形
  • .NET分布式缓存Memcached从入门到实战