【codewar-4kyu】Snail 待学习

##题目描述

Description:

Snail Sort

Given an n x n array, return the array elements arranged from outermost elements to the middle element, traveling clockwise.

array = [[1,2,3],
         [4,5,6],
         [7,8,9]]
snail(array) #=> [1,2,3,6,9,8,7,4,5]

For better understanding, please follow the numbers of the next array consecutively:

array = [[1,2,3],
         [8,9,4],
         [7,6,5]]
snail(array) #=> [1,2,3,4,5,6,7,8,9]

This image will illustrate things more clearly:

NOTE: The idea is not sort the elements from the lowest value to the highest; the idea is to traverse the 2-d array in a clockwise snailshell pattern.

NOTE 2: The 0x0 (empty matrix) is represented as [[]]我好像最后还是没考虑空矩阵的处理。。。啊啊啊啊,路漫漫啊

 1 helper = PaginationHelper([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘], 4)
 2 helper.page_count # should == 2
 3 helper.item_count # should == 6
 4 helper.page_item_count(0)  # should == 4
 5 helper.page_item_count(1) # last page - should == 2
 6 helper.page_item_count(2) # should == -1 since the page is invalid
 7
 8 # page_ndex takes an item index and returns the page that it belongs on
 9 helper.page_index(5) # should == 1 (zero based index)
10 helper.page_index(2) # should == 0
11 helper.page_index(20) # should == -1
12 helper.page_index(-10) # should == -1 because negative indexes are invalid

##思路分析

突然给我来了道4kyu....写了半天写了一长串,结果答案里别人一句就写完了。。。一句。。我的内心是崩溃的

##代码解析

Python,先贴别人的以便学习

1 #方案1
2 def snail(array):
3     return list(array[0]) + snail(zip(*array[1:])[::-1]) if array else []
 1 #方案2
 2 def snail(array):
 3     ret = []
 4     if array and array[0]:
 5         size = len(array)
 6         for n in xrange((size + 1) // 2):
 7             for x in xrange(n, size - n):
 8                 ret.append(array[n][x])
 9             for y in xrange(1 + n, size - n):
10                 ret.append(array[y][-1 - n])
11             for x in xrange(2 + n, size - n + 1):
12                 ret.append(array[-1 - n][-x])
13             for y in xrange(2 + n, size - n):
14                 ret.append(array[-y][n])
15     return ret
#方案3
def snail(array):
    a = []
    while array:
        a.extend(list(array.pop(0)))
        array = zip(*array)
        array.reverse()
    return a

下面是我自己的。。。完全没用到 python 高效的东西,只用了最最基本的函数,太弱智了

 1 #为方便本地调试,加了很多 print,提交的时候需要注释掉
 2 def snail(array):
 3     ans = []
 4     if len(array) == 1: # preven "index out of range"!!!
 5         ans = array[0]
 6         #print ans
 7         return ans
 8     len_row = len(array) - 1
 9     len_col = len(array[1]) - 1
10     all = (len_row + 1) * (len_col +1 )
11     #print len_col
12     over_row = 0
13     over_col = 0
14     while over_col <= len_col/2:
15         row = over_row  # current row
16         col = over_col
17         while over_col <= col < len_col - over_col:
18             now = array[row][col]
19             ans.append(now)
20             col += 1
21             #print ‘now == ‘, now
22         #print ‘this row over, col ==‘, col
23
24         while over_row <= row < len_row - over_row :
25             now = array[row][col]
26             ans.append(now)
27             row += 1
28             #print ‘now == ‘, now
29         #print ‘this col over, row ==‘, row
30
31         while over_col < col <= len_col - over_col:
32             now = array[row][col]
33             ans.append(now)
34             col -= 1
35             #print ‘now == ‘, now
36         #print ‘this reverse row over, col ==‘, col
37
38         while over_row < row <= len_row - over_row:
39             now = array[row][col]
40             ans.append(now)
41             row -= 1
42             #print ‘now == ‘, now
43     #print ‘this reverse col over, col ==‘, row
44
45         over_row += 1
46         over_col += 1
47         #print ‘print over_row == ‘, over_row, ‘print over_col == ‘, over_col
48     if len(ans) < all:
49         last = int(len_row/2)
50         ans.append(array[last][last])
51     #print ans
52     return ans
时间: 2024-10-14 00:54:54

【codewar-4kyu】Snail 待学习的相关文章

Snail—OC学习之文件操作(非读写)

#import <Foundation/Foundation.h> //宏定义一个文件夹的路径信息 #define path @"/Users/XXX/Desktop/Snail" //宏定义一个文件的路径 #define filePath @"/Users/XXX/Desktop/Snail/Snail3/Snail.txt" int main(int argc, const char * argv[]) { @autoreleasepool { //

Snail—UI学习之系统标签栏UITabBarController

背景条件是 有一个根控制器 继承于UITabBarController 然后 建四个UIViewController 再然后创建一个UIViewController 我们让它作为上面四个其中之一的子界面 然后再RootViewController中写入下面代码 #import "WJJRootViewController.h" #import "WJJFirstViewController.h" #import "WJJSecondViewControll

Snail—UI学习之UITextField

简单看一下UITextField的属性 - (void)createTextField{ UITextField * textField = [[UITextField alloc] initWithFrame:CGRectMake(40, 40, 240, 40)]; //设置UITextField的边框风格,否则看不见textField 盲点的话可以点到它 /* UITextBorderStyleRoundedRect 圆角 UITextBorderStyleBezel 上.左有边框 UIT

Snail—UI学习之初识

在AppDelegate.m中有几个默认存在的函数 // // WJJAppDelegate.m // 课上练习 // // Created by Snail on 15-7-20. // Copyright (c) 2015年 Snail. All rights reserved. // #import "WJJAppDelegate.h" @implementation WJJAppDelegate //程序的入口 仅仅同意一次 - (BOOL)application:(UIApp

Snail—UI学习之表视图TableView(一)

我们是整一个表视图 然后再表视图的上方是一个广告栏 首先,在.h文件中写上下面的代码 主要就是遵守一些代理 #import <UIKit/UIKit.h> @interface WJJRootViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate> @end 然后再.m文件中写上如下 #import "WJJRootViewContro

Snail—UI学习之表视图TableView(二)

接着上面的项目 ,当下面标记红色的代码写上后,我们按下右上角的edit按钮 就可以对cell进行插入.删除.移动等操作 #import "WJJRootViewController.h" @interface WJJRootViewController (){ //数据源 存放数据 NSMutableArray * _dataArray; //这就是我们的tableView UITableView * _tableView; //页面控制器 UIPageControl * _pageC

Snail—OC学习之类别Category

类别就是向类添加一些有用的功能或者方法 利于开发 类可以是系统类.可以是自定义类 类别跟子类是不一样的,类别只能添加一些方法 属性变量什么的不可以添加 不创建新类,即可对已有类进行扩展 做项目的时候 跟其他程序员会更好的合作 新建类别的图放在最后面 我们为系统类NSArray添加一个打印方法 使得能输出中文 界面如下 然后再NSArray+MyNSLog.h中声明一个函数 #import <Foundation/Foundation.h> @interface NSArray (MyNSLog

Snail—OC学习之NSNumber

在以后的学习或者以后做项目的时候 会希望把基本数据类型,例如:int.float等等数值 也存到数组或者字典中 因为数组.字典只能存储对象 所以,NSNumber类可以对基本数据进行封装成一个对象 进行存储 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber * intNumber = [NSNumber numberWithInt:11]

Snail—UI学习之表视图TableView多行删除

这次实现的功能是多行cell进行删除 代码是在上一次的基础上进行修改的 有的代码删除重写 有的方法只是加了一些逻辑判断 // // WJJRootViewController.m // blog_UITableView // // Created by Snail on 15-7-30. // Copyright (c) 2015年 Snail. All rights reserved. // #import "WJJRootViewController.h" @interface W