『LeetCode』练习第四弹_算法6题

6. ZigZag Conversion

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P   A   H   N
A P L S I I G
Y   I   R

And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);

convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

代码如下:

 1 import copy
 2 class Solution(object):
 3     def convert(self, s, numRows):
 4         """
 5         :type s: str
 6         :type numRows: int
 7         :rtype: str
 8                 """
 9         def postion_next(x, y):
10
11             if x == 0:
12                 return x + 1, y
13             elif x == r - 1:
14                 return x - 1, y + 1
15             elif mat[x - 1][y] == ‘ ‘:
16                 return x - 1, y + 1
17             else:
18                 return x + 1, y
19
20         r = numRows
21         if s == "":
22             return ""
23         if r == 1:
24             return s
25         c = (int(len(s) / (2 * r - 2)) + 1) * (r - 1)
26         line = []
27         mat = []
28         for i in range(c):
29             line.append(‘ ‘)
30         for i in range(r):
31             mat.append(copy.deepcopy(line))
32         l = len(s)
33         postion_s = 0
34         postion_m = [0, 0]
35         while True:
36             # print(postion_m)
37             if (postion_s) == l:
38                 break
39             mat[postion_m[0]][postion_m[1]] = s[postion_s]
40             postion_s += 1
41             postion_m = postion_next(postion_m[0], postion_m[1])
42
43         # for i in range(r):
44         #     for j in range(c):
45         #         print(mat[i][j], end=‘‘)
46         #         if j == c - 1:
47         #             print(‘\n‘, end=‘‘)
48         res = []
49         for i in range(r):
50             res += mat[i]
51         res = ‘‘.join(res)
52         # print(‘‘.join(res.split(‘ ‘)))
53         return ‘‘.join(res.split(‘ ‘))

结果:超时,不过逻辑没问题,注释部分是可视化输出z字形打印。

总结:

1.原生python矩阵生成操作好麻烦,用numpy的话np.array(list(‘ ‘*9)).reshape(3,3)就可以生成3*3的字符型矩阵

2.复习到了copy库的知识,如果不进行deepcopy的话下面的代码中mat的全部r层会浅拷贝line。

1 line = []
2 mat = []
3 for i in range(c):
4     line.append(‘ ‘)
5 for i in range(r):
6     mat.append(copy.deepcopy(line))

3.复习了str.split()的str切片剔除分隔符为list操作,顺便str.strip()开头结尾剥离操作,‘‘.join(list)列表合并为str操作。

时间: 2024-12-28 15:03:50

『LeetCode』练习第四弹_算法6题的相关文章

『LeetCode』练习第六弹_算法9题

9. Palindrome Number 判断回文数 1 class Solution(object): 2 def isPalindrome(self, x): 3 """ 4 :type x: int 5 :rtype: bool 6 """ 7 if x<0: 8 return False 9 y = int(str(abs(x))[::-1]) 10 if x == y: 11 return True 12 else: 13 ret

『PyTorch』第十四弹_torch.nn.Module深入分析

nn.Module基类的构造函数: def __init__(self): self._parameters = OrderedDict() self._modules = OrderedDict() self._buffers = OrderedDict() self._backward_hooks = OrderedDict() self._forward_hooks = OrderedDict() self.training = True 其中每个属性的解释如下: _parameters:

『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下

『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import torch.nn as nn import torch.nn.functional as F class LeNet(nn.Module): def __init__(self): super(LeNet,self).__init__() self.conv1 = nn.Conv2d(3, 6, 5)

『PyTorch』第十二弹_nn.Module和nn.functional

大部分nn中的层class都有nn.function对应,其区别是: nn.Module实现的layer是由class Layer(nn.Module)定义的特殊类,会自动提取可学习参数nn.Parameter nn.functional中的函数更像是纯函数,由def function(input)定义. 由于两者性能差异不大,所以具体使用取决于个人喜好.对于激活函数和池化层,由于没有可学习参数,一般使用nn.functional完成,其他的有学习参数的部分则使用类.但是Droupout由于在训

『LeetCode』练习第二弹

3. Longest Substring Without Repeating Characters Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", t

『TensorFlow』队列&amp;多线程&amp;TFRecod文件_我辈当高歌

TF数据读取队列机制详解 TFR文件多线程队列读写操作: TFRecod文件写入操作: import tensorflow as tf def _int64_feature(value): # value必须是可迭代对象 # 非int的数据使用bytes取代int64即可 return tf.train.Feature(int64_list=tf.train.Int64List(value=[value])) num_shards = 2 instance_perPshard = 2 for i

『cs231n』作业2选讲_通过代码理解卷积层&amp;池化层

卷积层 卷积层向前传播示意图: def conv_forward_naive(x, w, b, conv_param): """ A naive implementation of the forward pass for a convolutional layer. The input consists of N data points, each with C channels, height H and width W. We convolve each input w

『cs231n』作业2选讲_通过代码理解优化器

1).Adagrad一种自适应学习率算法,实现代码如下: cache += dx**2 x += - learning_rate * dx / (np.sqrt(cache) + eps) 这种方法的好处是,对于高梯度的权重,它们的有效学习率被降低了:而小梯度的权重迭代过程中学习率提升了.要注意的是,这里开根号很重要.平滑参数eps是为了避免除以0的情况,eps一般取值1e-4 到1e-8. 2).RMSpropRMSProp方法对Adagrad算法做了一个简单的优化,以减缓它的迭代强度: ca

『计算机视觉』SSD源码学习_基于TensorFlow(待续)

原项目地址:SSD-Tensorflow 根据README的介绍,该项目收到了tf-slim项目中包含了多种经典网络结构(分类用)的启发,使用了模块化的编程思想,可以替换检查网络的结构,其模块组织如下: datasets:              数据及接口,interface to popular datasets (Pascal VOC, COCO, ...) and scripts to convert the former to TF-Records; networks: