- 浏览: 460562 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
simpleDean 写道请问,Logger.setLevel ...
Java内置Logger详解 -
sunwang810812:
我运行了这个例子,怎么结果是这样的:2号车泊车6号车泊车5号车 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
jp260715007:
nanjiwubing123 写道参考你的用法,用如下方式实现 ...
面试题--三个线程循环打印ABC10次的几种解决方法 -
cb_0312:
SurnameDictionary文章我没看完,现在懂了
中文排序
生成一个连续数字的旋转二维数组,起始位置位于左上角,然后从起始位置开始递增,按照顺时针或者逆时针从外向里将连续的数组存入二维数组中,并输出生成的旋转二维数组。
测试代码:
输出结果:
下面在显示一个大小为34*34的旋转二维数组:
/** * * <code>ConvolutionalArray</code>主要是用来输出一个旋转式样的二维数组。 * * * 此二维数组由连续的数字组成,比如: * * * int i=5; * 1 2 3 4 5 * 16 17 18 19 6 * 15 24 25 20 7 * 14 23 22 21 8 * 13 12 11 10 9 * int i=6 * 1 2 3 4 5 6 * 20 21 22 23 24 7 * 19 32 33 34 25 8 * 18 31 36 35 26 9 * 17 30 29 28 27 10 * 16 15 14 13 12 11 * * * @author Eric * @version 1.0 * */ public class ConvolutionalArray { private static final int DEFAULT_NUMBER = 5; // 定义连续数字添加的方向 private enum Direction { Right, Down, Left, Up; } // 保存当前处理的方向,默认一开始是向右的。 private Direction currentDirection = Direction.Right; // 将一个二维数组看成X, Y两个方向,记录下,最小的X,Y值以及最大的X,Y private int minX = 0; private int minY = 0; private int maxX = DEFAULT_NUMBER - 1; private int maxY = DEFAULT_NUMBER - 1; private int currentCount = 0; /** * 打印数组。 * * @param expectedNumber : * 期望的二维数组每行显示的个数。 */ public void printArray(int expectedNumber) { int[][] array = buildArray(expectedNumber); printArray(array, expectedNumber); } /** * * @param expectedNumber: * 期望的二维数组每行显示的个数。 * @return: 返回一个连续数字组成的二维数组。 */ private int[][] buildArray(int expectedNumber) { int[][] result = new int[expectedNumber][expectedNumber]; // Total number of numeric values int count = expectedNumber * expectedNumber; // Reset max value for maxX and maxY. maxY = expectedNumber - 1; maxX = expectedNumber - 1; /* * 如果要生成一个nxn的二维数组,那么里面的最大数应该是n*n, 当处理的数字还没有达到这个最大值,一直循环处理下去。 * */ while (currentCount < count) { /* * 因为开始默认的方向是Right,也就是顺时针方向,所以,处理的顺序是 Right -> Down -> Left -> Up * ->Right ... 每次一个方向填充值之后,需要先判断当前数据是否达到最大值。 */ if (currentCount < count) { processRight(result); } if (currentCount < count) { processDown(result); } if (currentCount < count) { processLeft(result); } if (currentCount < count) { processUp(result); } } return result; } /** * 向右方向填充数据。 */ private void processRight(int[][] currentArray) { for (int i = minX; i <= maxX; i++) { currentArray[minY][i] = ++currentCount; } changeDirection(); minY++; } /** * 向下方向填充数据。 */ private void processDown(int[][] currentArray) { for (int i = minY; i <= maxY; i++) { currentArray[i][maxX] = ++currentCount; } changeDirection(); maxX--; } /** * 向左方向填充数据。 */ private void processLeft(int[][] currentArray) { for (int i = maxX; i >= minX; i--) { currentArray[maxY][i] = ++currentCount; } changeDirection(); maxY--; } /** * 向上方向填充数据。 */ private void processUp(int[][] currentArray) { for (int i = maxY; i >= minY; i--) { currentArray[i][minX] = ++currentCount; } changeDirection(); minX++; } /** * 打印二维数组的内容。 * * @param array * @param expectedNumber */ private void printArray(int[][] array, int expectedNumber) { for (int i = 0; i < expectedNumber; i++) { for (int j = 0; j < expectedNumber; j++) { System.out.print(appendSpace(array[i][j], expectedNumber)); } System.out.println(); } } /** * 为了保证数据输出时能够对齐,添加一些空格. */ private String appendSpace(int value, int expectedNumber) { int maxValue = expectedNumber * expectedNumber; int maxLength = String.valueOf(maxValue).length(); int currentValueLength = String.valueOf(value).length(); StringBuilder sb = new StringBuilder(); sb.append(value); for (int i = maxLength; i > currentValueLength; i--) { sb.append(" "); } sb.append(" "); return sb.toString(); } /** * 改变当前的方向。 */ private void changeDirection() { switch (currentDirection) { case Right: currentDirection = Direction.Down; break; case Down: currentDirection = Direction.Left; break; case Left: currentDirection = Direction.Up; break; case Up: currentDirection = Direction.Right; break; } } /** * 在一个二维数组基础上,以对角线为对称线,实现两侧数据的交换,并返回这个交换数据后的二维数组。 * * 这样做有一个用处:比如已经有一个向右的二维旋转数组(向右): * 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 采用此方法之后,可以得到一个向下方向的二维旋转数组(向下) 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7 */ private int[][] exchangeArray(int[][] originalArray, int expectedNumber) { int[][] exchangedArray = new int[expectedNumber][expectedNumber]; for (int i = 0; i < expectedNumber; i++) { for (int j = 0; j < expectedNumber; j++) { exchangedArray[i][j] = originalArray[j][i]; } } return exchangedArray; } /** * 打印交换数据后的二维数组。 */ public void printExchangedArray(int expectedNumber) { int[][] array = buildArray(expectedNumber); printArray(exchangeArray(array, expectedNumber), expectedNumber); } }
测试代码:
public class Test { public static void main(String[] args) { for (int i = 5; i < 11; i++) { System.out.println("Direction: Right; int = " + i); new ConvolutionalArray().printArray(i); System.out.println(); System.out.println("Direction: Down; int = " + i); new ConvolutionalArray().printExchangedArray(i); System.out.println(); } } }
输出结果:
下面在显示一个大小为34*34的旋转二维数组:
发表评论
-
工厂类中移除if/else语句
2016-07-10 19:52 857面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6673本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2181本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1690尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2661本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2108正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3707本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1922问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3946题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3121题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8712EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3288题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6659面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9805Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1379个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2106从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7359for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4076本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2844本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
leetcode二维数组 编程练习 包含常见的编程网站的练习习题(leetcode、牛客等)----待完成中... 也同时包含复习面试的编程练习 该src/main/java目录下,以文件夹命名,表示的是不同的来源 每个文件均可单独运行 其他...
二维数组中的查找6.旋转数组中的最小值11.调整数组使奇数位于偶数前面19.顺时针打印矩阵28.数组中出现次数超过一半的数字30.连续子数组最大和32.把数组排出最小的数35.数组中的逆序对37.数字在排序数组中出现的次数...
读取二维数组所有数据 调用C-动态数据库 贪食蛇 这个程序演示利用队列来实现数据的传引用 远程开启VI 连续写入文件 键盘控制TAB控件 黑白棋程序 Excel相关 Google_Earth和LV labview8.6如你所愿 labview8.6自动连接...
二维数组中查找目标值、4.替换字符串中的空格。5.从尾到头打印链表.6.由前序和中序遍历重建二叉树.7.用两个栈实现队列8.求旋转数组的最小数字、9.斐波那契数列的第n项(青蛙跳台阶)10.二进制中1的个数、11.数值的整数...
3. 二维数组中查找目标值 4. 替换字符串中的空格 5. 从尾到头打印链表 6. 由前序和中序遍历重建二叉树 7. 用两个栈实现队列 8. 求旋转数组的最小数字 9. 斐波那契数列的第n项(青蛙跳台阶) 10. 二进制中1的...
Interviews(剑指offer Java代码)二维数组中的查找替换空格从尾到头打印链表重建二叉树用两个栈实现队列旋转数组的最小数字斐波那契数列跳台阶变态跳台阶矩形覆盖二进制中1的个数数值的整数次方调整数组顺序使奇数...
7.3 在二维排序数组中查找给定值 7.4 在旋转有序数组中查找最小值 7.4.1 数组无重复 7.4.2 数组有重复 7.5 在旋转排序数组中查找指定数字 8. 暴力枚举法 8.1 求集合的子集 8.2 集合的全排列 8.3 在指定树中选择进行...
二维数组中的查找 从尾到头打印链表 重建二叉树(用前序和中序构建) 从上到下打印二叉树(层序遍历) 用两个栈实现队列 斐波那契数列 旋转数组的最小数字 矩阵中的路径 数值的整数次方 打印从1到最大的n位数 二进制中...
二维数组中的查找 2、05. 替换空格 3、11. 旋转数组的最小数字 4、17. 打印从1到最大的n位数 5、21. 调整数组顺序使奇数位于偶数前面 6、29. 顺时针打印矩阵 7、39. 数组中出现次数超过一半的数字 8、57. 和为s的两...
• 使用两个一维数组构造二维数组 • 部门评价等级转换 • 使用MMULT 函数计算产品结构指数 • 产生1-10 的自然数垂直序列和水平序列 • 等比例构造一维循环数组 • SUMIF函数对产品产量进行逐行汇总 • 利用MMULT...
03二维数组中的查找 04替换空格 05从尾到头打印链表 06重建二叉树 07用两个栈实现队列 08旋转数组的最小数字 09斐波那契数列 09跳台阶 09变态跳台阶 09矩阵覆盖 10二进制中1的个数 11数值的整数次方 14调整数组顺序...
1、二维数组的查找 2、替换空格 3、从尾到头打印链表 4、重建二叉树 5、用两个栈实现队列 6、旋转数组的最小数字 7、斐波那契数列 8、跳台阶 9、变态跳台阶 10、矩形覆盖 11、二进制中1的个数 12、数值的整数次方 13...
按行和按列排序的二维数组中的第 K 个最小元素 | 设置 1(硬) 最大和连续子阵列(中) 铁路/汽车站所需的最少站台数量(中) 找到丢失的数字(简单) 合并两个已排序的数组(简单) 在已排序和旋转的数组中搜索元素...
2.1 二维绘图 2.1.1 基本绘图函数 2.1.2 图形窗口的修饰 2.2 三维绘图 2.2.1 plot3 函数 2.2.2 三维网格图和曲面图 第三章 MATLAB 图形对象 3.1 图形对象 3.1.1 Root 对象 3.1.2 Figure 对象 3.1.3 ...
2.1 二维绘图 2.1.1 基本绘图函数 2.1.2 图形窗口的修饰 2.2 三维绘图 2.2.1 plot3 函数 2.2.2 三维网格图和曲面图 第三章 MATLAB 图形对象 3.1 图形对象 3.1.1 Root 对象 3.1.2 Figure 对象 3.1.3 ...
2.1 二维绘图 2.1.1 基本绘图函数 2.1.2 图形窗口的修饰 2.2 三维绘图 2.2.1 plot3 函数 2.2.2 三维网格图和曲面图 第三章 MATLAB 图形对象 3.1 图形对象 3.1.1 Root 对象 3.1.2 Figure 对象 3.1.3 ...
2.1 二维绘图 2.1.1 基本绘图函数 2.1.2 图形窗口的修饰 2.2 三维绘图 2.2.1 plot3 函数 2.2.2 三维网格图和曲面图 第三章 MATLAB 图形对象 3.1 图形对象 3.1.1 Root 对象 3.1.2 Figure 对象 3.1.3 ...
10.2.3 二维离散傅立叶变换( 2DDFT ) 10.2.4 快速傅立叶变换( FFT ) 10.2.5 傅立叶变换的研究与应用 10.3 离散余弦变换 10.3.1 DCT 变换矩阵 10.3.2 dct2 函数和 dctmtx 函数 10.4 Walsh- Hadamard ...
卷积提供了一种将两个通常大小不同但维数相同的数字数组相乘以产生相同维数的第三数组的方法。核形成了第二矩阵,为图像提供了效果。 应用5X5滤镜执行以下任务模糊化锐化 输入图像输出 方块模糊高斯模糊锐化3.边缘...