编写leetcode测试用例时所用的辅助函数
2015-01-31 17:10
141 查看
在做leetcode题目(https://oj.leetcode.com/problemset/algorithms/)的时候,我们总要自己写测试用例,常常要生成vector, list, tree,我将这些常用操作封装了一下,方便大家使用
tool.h
array, vector, list这几个结构的Create和Print很简单,就不多解释了
PS: XXXCreate函数的第一个参数总是元素的个数
tree的情况比较复杂,详细解释一下
假设一棵树如下:
那么leetcode上的表示是:{1,2,3,#,#,4,#,#,5}
代码是这个样子的:(#用INT_MAX代替)
打印出来之后,就是这个样子的
一切搞定
tool.h
//tool.h #ifndef TOOL_H_ #define TOOL_H_ #include <iostream> #include <vector> #include <cstdarg> #include <string> using namespace std; #include "windows.h" struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x=0) : val(x), left(NULL), right(NULL) {} }; void ArrayPrint(int arr[], int count); vector<int> IntVectorCreate(int count, ...); void IntVectorPrint(const vector<int> &vec); void IntVector2DPrint(const vector<vector<int>> &vec); vector<string> StringVectorCreate(int count, ...); void StringVectorPrint(const vector<string> &vec); TreeNode *TreeCreate(int count, ...); void TreePrint(TreeNode *root); ListNode *ListCreate(int count, ...); void ListPrint(ListNode *head); #endiftool.cpp
//tool.cpp #include "tool.h" void ListPrint(ListNode *head) { ListNode *node = head; while (node) { cout << node->val << " -> "; node = node->next; } cout << endl; } ListNode *ListCreate(int count, ...) { va_list argptr; va_start(argptr, count); ListNode *head, *curr; int num = va_arg(argptr, int); head = new ListNode(num); curr = head; for (int i = 1; i < count; i++) { num = va_arg(argptr, int); ListNode *temp = new ListNode(num); curr->next = temp; curr = temp; } va_end(argptr); return head; } //////////////////////////////////////////// void ArrayPrint(int arr[], int count) { for (int i = 0; i < count; i++) cout << arr[i] << " , "; cout << endl; } void IntVectorPrint(const vector<int> &vec) { for (size_t i = 0; i < vec.size(); i++) cout << vec[i] << " , "; cout << endl; } void IntVector2DPrint(const vector<vector<int>> &vec) { printf("[\n"); for (size_t i = 0; i < vec.size(); i++) { printf("[ "); for (size_t j = 0; j < vec[i].size(); j++) printf("%d, ", vec[i][j]); printf(" ]\n"); } printf("]\n"); } void StringVectorPrint(const vector<string> &vec) { cout << "------------------------------------" << endl; for (size_t i = 0; i < vec.size(); i++) cout << vec[i] << "_" << endl; cout << "------------------------------------" << endl; } ////////////////////////////////////////////////////////// vector<int> IntVectorCreate(int count, ...) { vector<int> result; va_list argptr; va_start(argptr, count); for(int i=0; i<count; i++) { int num = va_arg(argptr, int); result.push_back(num); } va_end(argptr); return result; } vector<string> StringVectorCreate(int count, ...) { vector<string> result; va_list argptr; va_start(argptr, count); for (int i = 0; i < count; i++) { char *str = va_arg(argptr, char*); result.push_back(str); } va_end(argptr); return result; } ////////////////////////////////////////////// TreeNode *TreeCreate(int count, ...) { va_list argptr; va_start(argptr, count); TreeNode **treeArr = new TreeNode*[count]; for (int i = 0; i < count; i++) { int num = va_arg(argptr, int); if (INT_MAX == num) treeArr[i] = NULL; else treeArr[i] = new TreeNode(num); } int curr = 1; for (int i = 0; i<count; i++) { if( !treeArr[i] ) continue; if( curr < count ) treeArr[i]->left = treeArr[curr++]; if (curr < count) treeArr[i]->right = treeArr[curr++]; } va_end(argptr); return treeArr[0]; } void SubTreePrint(TreeNode *node, int level) { if ( !node ) return; SubTreePrint(node->right, level + 1); for (int i = 0; i < level; i++) printf(" "); printf("%04d\n", node->val); SubTreePrint(node->left, level + 1); } void TreePrint(TreeNode *root) { cout << "------------------------------------" << endl; SubTreePrint(root, 0); cout << "------------------------------------" << endl; }
array, vector, list这几个结构的Create和Print很简单,就不多解释了
PS: XXXCreate函数的第一个参数总是元素的个数
int main() { int arr[] = { 1, 2, 3, 4, 5 }; ArrayPrint(arr, 5); vector<int> ivec = IntVectorCreate(5, 1, 2, 3, 4, 5); IntVectorPrint(ivec); vector<string> svec = StringVectorCreate(5, "11", "22", "33", "44", "55"); StringVectorPrint(svec); ListNode *node = ListCreate(5, 1, 2, 3, 4, 5); ListPrint(node); getchar(); return 0; }
tree的情况比较复杂,详细解释一下
假设一棵树如下:
那么leetcode上的表示是:{1,2,3,#,#,4,#,#,5}
代码是这个样子的:(#用INT_MAX代替)
TreeNode *tree = TreeCreate(9, 1, 2, 3, INT_MAX, INT_MAX, 4, INT_MAX, INT_MAX, 5); TreePrint(tree);
打印出来之后,就是这个样子的
一切搞定
相关文章推荐
- vs自动注释add-in插件编写(一)--辅助函数
- 请编写一个 C 函数,该函数将给定的一个整数转换成字符串
- 编写自己的php扩展函数
- 如何在VC中汇编,调用Nasm编写的函数
- 函数可重入性及编写规范
- 如何编写一个过滤掉HTML代码的函数?
- [原创]如何在Delphi中调用.Net编写的DLL中的函数(Function)、过程(Procedure)
- 看了网上的大多防SQL攻击程序,自己编写了一个函数,比较完美。大家一起测测~
- 编写实现函数strcat功能的程序
- ByVal和ByRef(编写ASP子程序所用到命令)
- 实现不需要辅助函数实现回调非静态类成员函数
- 编写一个函数,实现两分法查找算法。
- 导师作业:2、编写一个函数,将一个整数值转换为16进制表示的字符串。
- 一些socket 辅助函数的介绍和举例说明
- java 面试中的一道编写一个截取字符串的函数
- 用Curses函数编写一个汉诺塔游戏
- T-SQL: 三个通用的与日期相关的,辅助按周(星期日是周的最后一天)汇总的自定义函数
- C#自己编写的一个函数 可以删除字符串中指定开头和结尾中间的字符串
- VB2005编写外接程序的一些有用函数
- 编写的一个10进制转二进制字符串的函数