题解一:递归模拟
主要思路:
①利用一个string对象,初始化为"00000000";
②对n转二进制,转出来的值从string对象的尾部往前赋值
③返回string对象
复杂度分析:
时间复杂度:,递归八次,常数时间
空间复杂度:,一个8字节的string,常数空间
实现如下:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定一个数n,返回将这个数转化为八位的二进制数(不足八位,往前补0)。 * @param n int整型 代表题目中的n * @return string字符串 */ void f(int n, string &res,int i) { if (!n)return; res[i]=n%2+'0';//从后往前赋值 f(n / 2,res,i-1); } string tranBinary(int n) { // write code here string res="00000000";//保证有前缀0 f(n, res,7);//递归转二进制 return res;//返回结果 } };
题解二:使用bitset**
主要思路:
①将n存入长度为8的bitset对象
②使用to_string转成函数返回值返回
复杂度分析:
时间复杂度:,库实现,原理同题解一常数时间
空间复杂度:,一个长度为8的bitset,常数空间
实现如下:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 给定一个数n,返回将这个数转化为八位的二进制数(不足八位,往前补0)。 * @param n int整型 代表题目中的n * @return string字符串 */ string tranBinary(int n) { // write code here bitset<8> str(n); return str.to_string();//返回结果 } };