我正试图通过递归调用实现Karatsuba乘法.下面的代码应该可行,但我一直得到错误的答案.有什么想法吗?
public static long karatsuba(long x, long y){
//base case:
if (x < 10 || y < 10) return x * y;
//length of digits:
int xSize = String.valueOf(x).length();
int ySize = String.valueOf(y).length();
int N = Math.max(xSize, ySize);
//split each number in half (by length of digits):
long numX_hi = Long.valueOf((String.valueOf(x).substring(0, N/2)));
long numX_lo = Long.valueOf((String.valueOf(x).substring(N/2, xSize)));
long numY_hi = Long.valueOf((String.valueOf(y).substring(0, N/2)));
long numY_lo = Long.valueOf((String.valueOf(y).substring(N/2, ySize)));
//solve multiplications recursively:
long z0 = karatsuba(numX_lo,numY_lo);
long z1 = karatsuba((numX_hi+numX_lo),(numY_hi+numY_lo)); …Run Code Online (Sandbox Code Playgroud) 如何使用正则表达式捕获\ +括号内的每个空格字符?例如,在字符串中,
"abc and 123 {foo-bar bar baz } bit {yummi tummie} byte."
我应该在里面找到四个匹配{}- 但没有别的.假设Python语言并且字符串内容未知.
编辑:还假设没有嵌套大括号.
我正在尝试创建深度优先算法,该算法指定完成时间(顶点无法再展开的时间),这些算法用于Kosaraju算法等事情.我能够相当容易地创建DFS的递归版本,但是我很难将其转换为迭代版本.
我正在使用邻接列表来表示图形:顶点的字典.例如,输入图{1: [0, 4], 2: [1, 5], 3: [1], 4: [1, 3], 5: [2, 4], 6: [3, 4, 7, 8], 7: [5, 6], 8: [9], 9: [6, 11], 10: [9], 11: [10]}表示边(1,0),(1,4),(2,1),(2,5)等.以下是使用简单堆栈(LIFO)的迭代DFS的实现),但它不计算完成时间.我遇到的一个关键问题是,由于顶点被弹出,一旦顶点完全展开,算法就无法追溯其路径(与递归不同).我该如何解决?
def dfs(graph, vertex, finish, explored):
global count
stack = []
stack.append(vertex)
while len(stack) != 0:
vertex = stack.pop()
if explored[vertex] == False:
explored[vertex] = True
#add all outgoing edges to stack:
if vertex in graph: #check if key exists in …Run Code Online (Sandbox Code Playgroud) 例如,我的代码执行如下操作:
try:
for n in graph[x]:
#...
#...
if event == 0:
#do something
except IndexError:
#do the same thing
Run Code Online (Sandbox Code Playgroud)
我的if块和我的错误异常块具有相同的确切代码; 所以我没有冗余线,而是想要将两个块组合在一起.我想做一些像except IndexError or if target == 0:有条件的事情.这样做有一个聪明的方法吗?