题解 | #牛牛的旗语传递#
牛牛的旗语传递
https://www.nowcoder.com/practice/810b1c80a9c341c4af69facac350d6bc
考察知识点:字符串处理,数组的遍历与操作
题目解析:
输入:"TWIPARSEHC_NK",3
意思为加密后的字符:"TWIPARSEHC_NK",有3个单词
是由如下的形式组合成的
0 | 1 | 2 | 3 | 4 | 5 | 6
T | | A | | H | | K
W | P | R | E | C | N |
I | | S | | _ |
按照Z字形型的读法就是 TWI P ARS E HC_ N K
详细的思路解析在代码注释里了解
采用的编程语言:C
完整的编程代码:如图所示
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @param numRows int整型 * @return string字符串 */ char* decodeFlag(char* s, int numRows ) { char *word_number[1000] = {0}; char decode_s[1000] = {0}; int s_len = 0; int word_index[1000] = {0}; int index = 0, count = 0, k = 0; if (s == NULL) return NULL; /* 获取字符串s的长度*/ s_len = strlen(s); /* 为每个单词分配一片内存用于存储单词数组 */ for (int i = 0; i < numRows; i++) word_number[i] = (char *)malloc(1000 * sizeof(char)); while (1) { /* 加解密的算法流程如下解析 */ if (k % 2 == 0) { for (int j = 0; j < numRows; j++) { index = word_index[j]; word_number[j][index] = s[count++]; word_index[j]++; } } else { for (int j = (numRows-2); j > 0; j--) { index = word_index[j]; word_number[j][index] = s[count++]; word_index[j]++; } } if (count >= s_len) break; k++; } /* 将所有单词拼接成新的字符串 */ for (int i = 0; i < numRows; i++) strcat(decode_s, word_number[i]); /* 释放已分配的内存 */ for (int i = 0; i < numRows; i++) { if (word_number[i]) { free(word_number[i]); word_number[i] = NULL; } } /* 将字符串拷贝给s,因为函数内部的局部变量在函数退出后就被释放了 */ strncpy(s, decode_s, s_len); return s; }
面试高频TOP202解析 文章被收录于专栏
采用Java,C,Python等方法去解答面试高频TOP202题目,